我有一個JSON結構看起來是這樣的:反序列化JSON成幾個C#一個子類
"list":[
{
"type":"link",
"href":"http://google.com"
},
{
"type":"image",
"src":"http://google.com/logo.png"
},
{
"type":"text",
"text":"some text here"
},
]
我想反序列化到對象的列表,其中每個對象爲基礎的一個子類此類。列表中的每個項目都有不同的屬性(href,src,text),所以我不能使用同一個類來達到一個。相反,我想要一個普通類的三個子類。 JSON列表中每個項目的type屬性可以用來決定使用哪個子類。因此,例如,我可以有以下類別
public Item{
public string type {get; set;}
}
public LinkItem : Item {
public string href {get; set;}
}
public ImageItem : Item {
public string src {get; set;}
}
public TextItem : Item {
public string text {get; set;}
}
有沒有辦法做到這一點?還是有更好的方法來反序列化異構對象類型的列表?
我使用json.net的方式
如何創建一個具有所有屬性的類。反序列化以獲取該類實例的列表。然後根據類型進行過濾並投影創建專用實例所需的屬性。我認爲這是你現在正在做的事情,並正在尋找更好的方法? – 2012-07-11 09:31:59
隨着應用程序的不斷增長,單個項目的複雜性可能會增加,並且對於每個可能的屬性都有一個基類似乎是個不錯的主意。我正在考慮的是使用匿名對象,然後根據類型創建實例。 – Marius 2012-07-11 09:35:16
我並不是指基類。我在考慮更多的中級dto課程,它有所有可能的選擇。從dto對象列表中,您可以塑造所需的專用對象。這樣,您的域名不必因序列化問題而混亂。那就是說,你可以使用動態對象?我沒有意識到匿名類型可以讓你不定義某些屬性......因爲在第一個反序列化的anon對象的屬性不是第二個反序列化的anon對象將具有的屬性。 – 2012-07-11 09:43:01