C# XmlSerializer。如何反序列化以下结构?
Web服务返回的文档如下所示:C# XmlSerializer。如何反序列化以下结构?,c#,.net,xml,xmlserializer,C#,.net,Xml,Xmlserializer,Web服务返回的文档如下所示: <CarrierService.GetAlerts> <ResponseDO> <status>APPROVED</status> <action>OK</action> <code>SFW00542</code> <displayMsg/> <techMsg/> </ResponseDO> <Aler
<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; }
}
[XmlRoot(“CarrierService.GetAlerts”)]
公共类GetAlertsResponse
{
[xmlement(ElementName=“ResponseDO”)]
公共响应do ResponseDo{get;set;}
[XmlArray(ElementName=“AlertList”)]
公共列表AlertList{get;set;}
}
公共类警报项
{
[XmlElement(ElementName=“docketNumber”)]
公共字符串DocketNumber{get;set;}
[XmlElement(ElementName=“dotNumber”)]
公共字符串点编号{get;set;}
}
我对AlertItem.Change有问题。它在AlertItem中重复,并且不包含在“变更列表”中
如何反序列化这些项?您可以稍微欺骗一下并在列表中使用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;}
}
公共类AlertItem
{
[XmlElement(ElementName=“docketNumber”)]
公共字符串DocketNumber{get;set;}
[XmlElement(ElementName=“dotNumber”)]
公共字符串点编号{get;set;}
[XmlElement(“变更”)]
公共列表更改{get;set;}
}
公共阶级变革
{
[XmlElement(“字段”)]
公共字符串字段{get;set;}
[XmlElement(“From”)]
来自{get;set;}的公共字符串
[XmlElement(“To”)]
{get;set;}的公共字符串
}
如果要创建更改列表,这将起作用
<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;}
}
[XmlRoot(“CarrierService.GetAlerts”)]
公共类GetAlertsResponse
{
[xmlement(ElementName=“ResponseDO”)]
公共响应do ResponseDo{get;set;}
[XmlArray(ElementName=“AlertList”)]
公共列表AlertList{get;set;}
}
公共类警报项
{
[XmlElement(ElementName=“docketNumber”)]
公共字符串DocketNumber{get;set;}
[XmlElement(ElementName=“dotNumber”)]
公共字符串点编号{get;set;}
[xmlement(ElementName=“Changes”)]
公共更改更改{get;set;}
}
公共阶级变革
{
[xmlement(ElementName=“Change”)]
公共列表更改列表{get;set;}
}
公共阶级变革
{
[XmlElement(“字段”)]
公共字符串字段{get;set;}
[XmlElement(“From”)]
来自{get;set;}的公共字符串
[XmlElement(“To”)]
{get;set;}的公共字符串
}
为什么不使用更改列表?与使用AlertItem.Matt列表的方式相同,我无法控制XML,因此存在如何反序列化的问题