我的 XML 消息如下所示:
<msg>
<reply userid="sales" requestid="2" index="1" pagesize="1000" total="1" type="order">
<order id="12db8625cd4-000" owner="sales">
<qty size="1" working="0"/>
<price limit="0.0"/>
</order>
<order id="12db8636344-000" owner="sales">
<qty size="1000" working="0"/>
<price limit="0.0"/>
</order>
</reply>
</msg>
如何定义要从回复数组中读取的 Order 对象?我的对象看起来像:
[XmlRootAttribute("reply")]
public class MessageReply
{
[XmlAttribute("userid")]
public string UserId { get; set; }
[XmlAttribute("requestid")]
public string RequestId { get; set; }
[XmlAttribute("type")]
public string Type { get; set; }
[XmlArrayItem(typeof(Order))]
public List<Order> Orders { get; set; }
}
[XmlRootAttribute("order")]
public class Order
{
[XmlAttribute("id")]
public string Id { get; set; }
[XmlAttribute("owner")]
public string Owner { get; set;}
[XmlAttribute("assignee")]
public string Assignee { get; set; }
[XmlAttribute("instrumentid")]
public string InstrumentId { get; set; }
[XmlAttribute("side")]
public string Side { get; set;}
[XmlAttribute("type")]
public string Type { get; set; }
}
在我的例子中,订单应该在单独的元素标签 Orders 中。我想从回复元素中读取它们。您知道要更改我的对象 XML 属性的哪些内容吗?
最佳答案
改变:
[XmlArrayItem(typeof(Order))]
public List<Order> Orders { get; set; }
到:
[XmlElement("order")]
public List<Order> Orders { get; set; }
嗯...严格来说我倾向于(我不喜欢可设置的列表)使用:
private List<Order> orders;
[XmlElement("order")]
public List<Order> Orders {get{ return orders ?? (orders = new List<Order>());}}
您还需要一个不同的根对象:
[XmlRoot("msg")]
public class Message
{
[XmlElement("reply")]
public MessageReply Reply { get; set; }
}
然后这个工作:
var ser = new XmlSerializer(typeof(Message));
MessageReply reply;
using(var reader = new StringReader(xml))
{
reply = ((Message)ser.Deserialize(reader)).Reply;
}
关于c# - 将数组反序列化为复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4792230/