請問各位前輩
如果今天有:介面、類別A(實作介面)、多個其他類別(繼承類別A)
介面的屬性:id、type
類別A的屬性:id、type、date
其他類別繼承類別A的各類別則有各自不同的屬性
預計想要產出的json結構為:id、type、date、data{各類別各自不同的屬性←此處可能有多個屬性}
原先採取的方式是在各類別內都新增一個 List<各類別> data {get;set;}
這個方式產出來的json結構雖然對了
但是要將反序列化時用
var a = JsonConvert.DeserializeObject<List<類別A>>(json);
會丟失data下的資料
在類別A下新增List<?> data {get;set;}
由於各類別結構不同,這個List<?>的類別(class)就不曉得該如何填入
要保持json的結構一致的話沒辦法指定各類別的結構並將data更名(無法共用物件名稱data,還是可以?)
目標是:
描述有點雜亂,如果有謬誤或是需要補充還請不吝提出
謝謝!
在類別A下新增List<?> data {get;set;}
由於各類別結構不同,這個List<?>的類別(class)就不曉得該如何填入
要保持json的結構一致的話沒辦法指定各類別的結構並將data更名(無法共用物件名稱data,還是可以?)
泛型呢?
官方文件
在父類別宣告List<子類別> data ← 名稱無法重複使用在每一個子類別上
這樣json的結構就會亂掉了...
joey19930809 可以更詳細的描述你要的結果嗎? 試著直接寫出json結構
To powerc
https://ithelp.ithome.com.tw/questions/10206777
幾乎一樣的問題我又重發一篇文,請你移駕到此處看
如有需要補充的地方還請不吝提出!
interface IInterface
{
string Id { get; set; }
int Type { get; set; }
}
class AClass<T> : IInterface
{
public DateTime Date { get; set; }
public string Id { get; set; }
public int Type { get; set; }
public T Data { get; set; }
}
class BClass
{
public string str = "IsBClass";
}
class CClass
{
public string str = "IsCClass";
}
AClass<BClass> bClass = new AClass<BClass>
{
Id = "B",
Type = 1,
Date = DateTime.Now,
Data = new BClass()
};
AClass<CClass> cClass = new AClass<CClass>
{
Id = "c",
Type = 2,
Date = DateTime.Now,
Data = new CClass()
};
string bJson = JsonConvert.SerializeObject(bClass);
string cJson = JsonConvert.SerializeObject(cClass);
Console.WriteLine(bJson);
Console.WriteLine(cJson);
AClass<BClass> newBClass = JsonConvert.DeserializeObject<AClass<BClass>>(bJson);
AClass<CClass> newCClass = JsonConvert.DeserializeObject<AClass<CClass>>(cJson);