将JSON反序列化为多个C#子类之一

我有一个看起来像这样的json结构:

"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

正如@AmithGeorge所建议的那样,您可以使用dynamic对象来动态解析您的json对象。 你可以将这个伟大的动态类用于Shawn Weisfeld的JSON 。 这是他的博客解释他是如何做到的 。

 JavaScriptSerializer jss = new JavaScriptSerializer(); jss.RegisterConverters(new JavaScriptConverter[] { new DynamicJsonConverter() }); dynamic glossaryEntry = jss.Deserialize(json, typeof(object)) as dynamic; Console.WriteLine("glossaryEntry.glossary.title: " + glossaryEntry.glossary.title); Console.WriteLine("glossaryEntry.glossary.GlossDiv.title: " + glossaryEntry.glossary.GlossDiv.title); Console.WriteLine("glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.ID: " + glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.ID); Console.WriteLine("glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.para: " + glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.para); foreach (var also in glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso) { Console.WriteLine("glossaryEntry.glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso: " + also); }