我有一些以下格式的 XML:
<PurchaseItem>
<Name>Item 1</Name>
<Costs>
<Cost>
<Code>A</Code>
<Info>Test 1</Info>
</Cost>
<Cost>
<Code>B</Code>
<Info>Test 1</Info>
</Cost>
<Cost>
<Code>C</Code>
<Info>Test 1</Info>
</Cost>
</Costs>
</PurchaseItem>
我希望将此 XML 反序列化为以下类:
public class PurchaseItem
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Costs")]
public Cost[] Costs { get; set; }
}
public class Cost
{
[XmlElement("Code")]
public string Code{ get; set; }
[XmlElement("Info")]
public string Info{ get; set; }
}
但是我似乎无法让它工作,除非我让另一个类作为 Cost[] 的包装器。 我怎样才能像上面的代码那样在 PurchaseItem 类中序列化成本数组?
请您参考如下方法:
你正在定义一个数组,你应该使用[XmlArray]属性:)
[Serializable]
public class Cost
{
[XmlElement("Code")]
public string Code { get; set; }
[XmlElement("Info")]
public string Info { get; set; }
}
[Serializable]
public class PurchaseItem
{
[XmlElement("Name")]
public string Name { get; set; }
// XmlArray of Cost
[XmlArray(ElementName = "Costs")]
public Cost[] Costs { get; set; }
}
public class Tests
{
[Test]
public void Test()
{
var serializer = new XmlSerializer(typeof (PurchaseItem));
var xml = @"<PurchaseItem>
<Name>Item 1</Name>
<Costs>
<Cost>
<Code>A</Code>
<Info>Test 1</Info>
</Cost>
<Cost>
<Code>B</Code>
<Info>Test 1</Info>
</Cost>
<Cost>
<Code>C</Code>
<Info>Test 1</Info>
</Cost>
</Costs>
</PurchaseItem>";
var data = Encoding.UTF8.GetBytes(xml);
var reader = XmlReader.Create(new MemoryStream(data));
var item = (PurchaseItem) serializer.Deserialize(reader);
Assert.AreEqual(item.Costs[0].Code, "A");
Assert.AreEqual(item.Costs[1].Code, "B");
Assert.AreEqual(item.Costs[2].Code, "C");
}
}
