我正在向第三方API发出Web请求,并希望动态反序列化对C#类的响应。但是有一个问题,作为回应,我有时得到对象列表,有时候有一个对象。
它给出了一些错误,就像已经在'xml中'存在'objectClass'一样。
我知道解决方案是:我需要为两个响应定义不同的类。是否还有其他选项可以使用一个类反序列化此xml?
示例回复:
<data listtype="objectClass" count="1">
<objectClass>
</objectClass>
</data>
在其他回复中:
<data listtype="objectClass" count="2" totalcount="2" numremaining="0">
<objectClass>
<!-- Properties -->
</objectClass>
<objectClass>
<!-- Properties -->
</objectClass>
</data>
类别:
[XmlRoot(ElementName = "data")]
public class Data
{
[XmlElement(ElementName = "objectClass")]
public objectClass ObjectItem { get; set; }
[XmlElement(ElementName = "objectClass")]
public List<objectClass> ObjectItemList { get; set; }
}
修改:
最后我发现响应xml包含不同情况下的对象名称。
示例回复:
<data listtype="objectClass" count="1">
<objectClass>
</objectClass>
</data>
在其他回复中:
<data listtype="OBJECTCLASS" count="2" totalcount="2" numremaining="0">
<OBJECTCLASS>
<!-- Properties -->
</OBJECTCLASS>
<OBJECTCLASS>
<!-- Properties -->
</OBJECTCLASS>
</data>
我在我的数据类中添加了一个元素,现在可以正常工作了。
[XmlElement(ElementName = "OBJECTCLASS")]
public List<OBJECTCLASS> ObjectItem { get; set; }
答案 0 :(得分:1)
您始终可以使用列表选项。 就像你有一个对象一样,列表中会有一个项目......
您可以像这样修改您的课程:
[XmlRoot(ElementName = "data")]
public class Data
{
[XmlElement(ElementName = "objectClass")]
public List<objectClass> ObjectItemList { get; set; }
}
答案 1 :(得分:1)
您需要使用XMLArray
和XmlArrayItem
来帮助XML反序列化器将对象解析为ListItems
。
[XmlRoot(ElementName = "data")]
public class Data
{
[XmlArray("data")]
[XmlArrayItem("objectClass")]
public List<objectClass> ObjectItemList { get; set; }
}