我創建了一個類,其中包含一個使用“this”關鍵字將自身序列化為 JSON 字串的函式,然后該類由子類繼承。
public class Parent
{
int a { get; set; }
public ToJsonString()
{
return JsonSerializer.Serialize(this);
}
}
public class Child : Parent
{
int b { get; set; }
}
如果子類的實體隨后呼叫 ToJsonString() 函式,回傳的字串是包含子類的屬性,還是僅包含父類的屬性?
Child instance = new Child();
string serialized = instance.ToJsonString();
uj5u.com熱心網友回復:
這可以很容易地測驗看到(下面的代碼)。
的原始版本ToJsonString有一個Parent引數并且只序列化Parent屬性。這可以通過使用相同的實作覆寫ToJsonString來解決:Child
using System.Text.Json;
Console.WriteLine($"Using parent version of 'ToJsonString': {new Child().BaseToJsonString()}");
Console.WriteLine($"Using child version of 'ToJsonString': {new Child().ToJsonString()}");
Console.WriteLine($"Using better version of 'ToJsonString': {new Child().BetterToJsonString()}");
public class Parent
{
public int A { get; set; } = 1;
public string BaseToJsonString()
{
return JsonSerializer.Serialize(this);
}
public virtual string ToJsonString()
{
return JsonSerializer.Serialize(this);
}
public string BetterToJsonString()
{
return JsonSerializer.Serialize(this, GetType());
}
}
public class Child : Parent
{
public int B { get; set; } = 2;
public override string ToJsonString()
{
return JsonSerializer.Serialize(this);
}
}
這產生:
使用 'ToJsonString' 的父版本:{"A":1}
使用 'ToJsonString' 的子版本:{"B":2,"A":1}
使用更好的 'ToJsonString' 版本:{"B":2 "一":1}
編輯:
正如 Petrusion 正確指出的那樣,另一個更簡單的解決方案是強制該Serialize方法使用實際的運行時型別(參見BetterToJsonString上面的方法)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/486319.html
