我有一个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