我试图从rest api中使用数据。 我需要使用RestSharp从rest API反序列化对象。 列表中的所有对象都是"对象"对象的类是"类型"的值的元素。属性。
这是我的意思的一个例子:
<list>
<object type="cat">
<id>107</id>
<name>Garry</name>
</object>
<object type="dog">
<id>83</id>
<name>Fluffy</name>
</object>
</list>
部分实现的示例类:
public class Animal
{
public long Id { get; set; }
public string Name { get; set; }
}
[DeserializeAs(Name = "cat")]
public class Cat : Animal
{
}
[DeserializeAs(Name = "dog")]
public class Dog : Animal
{
}
这似乎是错误的方法,但尝试使用属性定义我的所有类:
[DeserializeAs(Name = "object")]
这允许它们正确地反序列化,只要我知道列表中期望的对象类型,并且显然列表只包含一种类型的对象。
如果我得到一个包含不同类型对象的列表,就会出现问题。
使用标准解串器有没有办法处理好这个问题? 如果没有,我愿意采用大量不同对象类型来有效地处理这个问题。
答案 0 :(得分:0)
我看了标准的反序列化器。我很确定它不是为处理这个而设计的。我最终制作了自己的叉子。
我添加了另一个用于描述列表中对象的属性:
[DeserializeElementAs(Name = "", Attribute = "", Value = "")]
属性名称可能不是最好的,但我不知道该怎么称呼它。
因此问题中xml的类将被定义为:
public class Animal
{
public long Id { get; set; }
public string Name { get; set; }
}
[DeserializeElementAs(Name = "object", Attribute = "type", Value = "cat")]
[DeserializeAs(Name = "cat")]
public class Cat : Animal
{
}
[DeserializeElementAs(Name = "object", Attribute = "type", Value = "dog")]
[DeserializeAs(Name = "dog")]
public class Dog : Animal
{
}
如果有其他人需要,我将fork的代码发布到github。
https://github.com/comless/RestSharp/commit/1fea0fd97cadc7035dbea99c17b7423ca14b5267