3
您能否更加简单地在另一个标签('data')内消除XML('条目'),而无需在'Items'get属性中使用另一个deserilization。 “公共项目[]项目”中可能有某种属性。C#XML反序列化XML中带有属性的XML
XML:
<body>
<request></request>
<data><![CDATA[
<items>
<item>
<property1>Name1</property1>
<property2>111</property2>
</item>
<item>
<property1>Name2</property1>
<property2>222</property2>
</item>
<item>
<property1>Name3</property1>
<property2>333</property2>
</item>
</items>]]>
</data>
</body>
的TestClass:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
const string xml = "<body>" +
"<request></request>" +
"<data><![CDATA[" +
"<items>" +
"<item>" +
"<property1>Name1</property1>" +
"<property2>111</property2>" +
"</item>" +
"<item>" +
"<property1>Name2</property1>" +
"<property2>222</property2>" +
"</item>" +
"<item>" +
"<property1>Name3</property1>" +
"<property2>333</property2>" +
"</item>" +
"</items>" +
"]]></data>" +
"</body>";
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
var serializer = new XmlSerializer(typeof (Body));
var response = serializer.Deserialize(new XmlNodeReader(xmlDoc)) as Body;
Assert.IsNotNull(response);
Assert.AreEqual(3, response.Items.Length);
}
}
[Serializable, XmlRoot("body")]
public class Body
{
[XmlElement("request")]
public string Request;
[XmlElement("data")]
public string Data;
public Item[] Items
{
get
{
var document = new XmlDocument();
document.LoadXml(Data);
var serializer = new XmlSerializer(typeof(ItemList));
var response = serializer.Deserialize(new XmlNodeReader(document)) as ItemList;
return response.Items;
}
}
}
[Serializable, XmlRoot("items")]
public class ItemList
{
[XmlElement("item")]
public Item[] Items;
}
[Serializable]
public class Item
{
[XmlElement("property1")]
public string Property1;
[XmlElement("property2")]
public string Property2;
}
你在这种情况下使用'CData'任何理由吗?为什么不让'Items'在没有'Data'属性的情况下正常序列化/反序列化? –
我从另一个系统得到这个CData – sulgpallur
问题是,CData和Data是一个字符串的事实意味着技术上什么是内部数据是一个字符串,而不是XML,所以你不能够反序列化它没有两个步骤。 – Chris