gpt4 book ai didi

c# - 将 JSON 反序列化为几个 C# 子类之一

转载 作者:可可西里 更新时间:2023-11-01 09:15:50 26 4
gpt4 key购买 nike

我有一个看起来像这样的 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 列表中每个项目的类型属性可用于决定使用哪个子类。因此,例如,我可以有以下类(class)

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;}
}

有什么办法吗?或者是否有更好的方法来反序列化异构对象类型列表?

EDIT:

顺便说下我用的是json.net

最佳答案

正如@AmithGeorge 所建议的,您可以使用dynamic 对象来动态解析您的json 对象。您可以使用 this great dynamic class for JSON by Shawn Weisfeld . Here is his blog explaining how he do it .

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

关于c# - 将 JSON 反序列化为几个 C# 子类之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11429546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com