将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);

}

以上是 将JSON反序列化为几个C#子类之一 的全部内容, 来源链接: utcz.com/qa/403789.html

回到顶部