XmlSerializer的。如何反序列化以下结构?

时间:2013-08-12 18:07:52

标签: c# .net xml xmlserializer

Web服务返回如下所示的文档:

<CarrierService.GetAlerts>
 <ResponseDO>
  <status>APPROVED</status>
  <action>OK</action>
  <code>SFW00542</code>
  <displayMsg/>
  <techMsg/>
 </ResponseDO>
 <AlertList count="1">
  <AlertItem>
   <docketNumber>MC758</docketNumber>
   <dotNumber>17952</dotNumber>
   <Change>
    <Field>rating</Field>
    <From>Conditional</From>
    <To>Satisfactory</To>
   </Change>
   <Change>
    <Field>rateDate</Field>
    <From>2010-08-31</From>
    <To>2010-12-20</To>
   </Change>
  </AlertItem>
 </AlertList>
</CarrierService.GetAlerts>

我正在使用XmlSerializer,这就是我的映射类的外观:

[XmlRoot("CarrierService.GetAlerts")] 
public class GetAlertsResponse
{
    [XmlElement(ElementName = "ResponseDO")]
    public ResponseDo ResponseDo { get; set; }

    [XmlArray(ElementName = "AlertList")]
    public List<AlertItem> AlertList { get; set; }
}


public class AlertItem
{
    [XmlElement(ElementName = "docketNumber")]
    public string DocketNumber { get; set; }

    [XmlElement(ElementName = "dotNumber")]
    public string DOTNumber { get; set; }
}

我有AlertItem.Change的问题。它在AlertItem内重复,并没有包含在“ChangeList”中。

如何对这些项进行反序列化?

2 个答案:

答案 0 :(得分:2)

你可以稍微欺骗并在List上使用XmlElement,XmlSerializer将很乐意遵守。

public class AlertItem
{
    [XmlElement(ElementName = "docketNumber")]
    public string DocketNumber { get; set; }

    [XmlElement(ElementName = "dotNumber")]
    public string DOTNumber { get; set; }

    [XmlElement("Change")]
    public List<Change> Changes {get; set;}
}

public class Change
{
    [XmlElement("Field")]
    public string Field {get; set;}

    [XmlElement("From")]
    public string From {get; set;}

    [XmlElement("To")]
    public string To {get; set;}
}

答案 1 :(得分:0)

如果要创建更改列表,可以使用

<CarrierService.GetAlerts>
 <ResponseDO>
  <status>APPROVED</status>
  <action>OK</action>
  <code>SFW00542</code>
  <displayMsg/>
  <techMsg/>
 </ResponseDO>
 <AlertList count="1">
  <AlertItem>
   <docketNumber>MC758</docketNumber>
   <dotNumber>17952</dotNumber>
<Changes>
   <Change>
    <Field>rating</Field>
    <From>Conditional</From>
    <To>Satisfactory</To>
   </Change>
   <Change>
    <Field>rateDate</Field>
    <From>2010-08-31</From>
    <To>2010-12-20</To>
   </Change>
</Changes>
  </AlertItem>
 </AlertList>
</CarrierService.GetAlerts>

和班级

[XmlRoot("CarrierService.GetAlerts")] 
public class GetAlertsResponse
{
    [XmlElement(ElementName = "ResponseDO")]
    public ResponseDo ResponseDo { get; set; }

    [XmlArray(ElementName = "AlertList")]
    public List<AlertItem> AlertList { get; set; }
}
public class AlertItem
{
    [XmlElement(ElementName = "docketNumber")]
    public string DocketNumber { get; set; }

    [XmlElement(ElementName = "dotNumber")]
    public string DOTNumber { get; set; }

    [XmlElement(ElementName = "Changes")]
    public Changes Changes { get; set; }
}
public class Changes
{
    [XmlElement(ElementName = "Change")]
    public  List<Change> ChangesList { get; set; }
}
public class Change
{
    [XmlElement("Field")]
    public string Field {get; set;}

    [XmlElement("From")]
    public string From {get; set;}

    [XmlElement("To")]
    public string To {get; set;}
}
相关问题