我尝试使用以下XML测试对我的Web API的1个HTTP POST XML请求:
<trx>
<header>...</header>
<body>
<unity keycnt="4">
<key param="param1"><![CDATA[value1]]</key>
<key param="param2"><![CDATA[value2]]</key>
<key param="param3"><![CDATA[value3]]</key>
<key param="param4"><![CDATA[value4]]</key>
</unity>
</body>
</trx>
当我使用此类列表反序列化该请求时:
[Serializable()]
[XmlRoot(ElementName="trx")]
public class Trx {
[XmlElement("header")]
public Header Header { get; set;}
[XmlElement("body")]
public Body Body{ get; set;}
}
课程正文:
[Serializable()]
public class Body{
[XmlElement("unity")]
public Unity Unity{ get; set;}
}
Unity类:
[Serializable()]
public class Unity{
[XmlAttribute("keycnt")]
public string keycnt{ get; set;}
[XmlElement("key")]
public List<Key> KeyList{ get; set;}
}
类密钥:
[Serializable()]
public class Key{
[XmlAttribute("param")]
public string param{ get; set;}
}
反序列化后,我得到除键列表项的值之外的所有属性。(value1,value2,value3,value4)
答案 0 :(得分:1)
您需要使用Key
数据类型向string
类添加一个属性,然后您的XmlSerializer
将为您在CDATA
中反序列化值。
并使用[XmlText]
装饰此属性。此属性可以为您提供CDATA作为xml中特定节点中的文本。
所以您的Key
类应该是。
[Serializable()]
public class Key
{
[XmlAttribute("param")]
public string param { get; set; }
[XmlText]
public string Text { get; set; }
}
答案 1 :(得分:0)
还要检查您是否输入了XML。您的XML格式错误。这里更正了一个。最后缺少CDATA元素。
<trx>
<header></header>
<body>
<unity keycnt="4">
<key param="param1"><![CDATA[value1]]></key>
<key param="param2"><![CDATA[value2]]></key>
<key param="param3"><![CDATA[value3]]></key>
<key param="param4"><![CDATA[value4]]></key>
</unity>
</body>