2011-01-25 14 views
3

私の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> 

にはどうすれば返事アレイから読み出さするためのオブジェクトを定義することができますか?私のオブジェクトは次のようになります:

[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; } 
} 

私の場合、注文は個別の要素タグ注文にあるべきです。私はreply要素からそれらを読みたいと思います。私のオブジェクトのXML属性で何を変更するべきか考えていますか?

答えて

5

変更:

[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; 
} 
+0

おかげで多くのことを。あなたは私の日を救った:) –

関連する問題