XML反序列化;t初始化数组元素

本文关键字:初始化 数组元素 反序列化 XML | 更新日期: 2023-09-27 18:26:50

我正在尝试反序列化以下XML:

<ns0:L2CCustomer xmlns:ns0="http://CustomerSyncFromMDM_L2C.L2CCustomer_XML">
  <customerList>
    <customer>
      <DNV_Status>Active</DNV_Status>
      <MDM_ID>1270004</MDM_ID>
      <fullName>JONBER030</fullName>
      <AFFRowID>1-GT6E0X</AFFRowID>
      <addressList>
        <address>
          <addrType>Office</addrType>
          <addrStatus>Active</addrStatus>
          <MDM_ID>2090001</MDM_ID>
          <addrLine1>Tårnveien 14</addrLine1>
          <addrLine2>Buildling 2</addrLine2>
          <city>Ås</city>
          <postalCode>1430</postalCode>
          <country>Norway</country>
          <validCountryISO2>NO</validCountryISO2>
          <AFFRowID>1-GT6E13</AFFRowID>
        </address>
      </addressList>
    </customer>
   </customerList>
</ns0:L2CCustomer>

我正在使用的代码(T属于AffinitisClientRoot类型):

System.IO.StreamReader r = new System.IO.StreamReader(m.BodyStream);
string cze = r.ReadToEnd();
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
T result;
using (System.IO.TextReader reader = new System.IO.StringReader(cze))
{
    result = (T)serializer.Deserialize(reader);
}            

类别:

[Serializable]
[XmlRoot(ElementName = "L2CCustomer", Namespace = "http://CustomerSyncFromMDM_L2C.L2CCustomer_XML")]
[XmlType("L2CCustomer")]
public class AffinitasClientRoot
{
    [XmlArray("customerList")]
    [XmlArrayItem("customer")]
    public AffinitasClient[] Clients { get; set; }
}
[Serializable]
[XmlRoot(ElementName = "customer")]
[XmlType("customer")]
public class AffinitasClient
{
    [XmlElement(ElementName = "AFFRowID")]
    public string RowId { get; set; }
    [XmlElement(ElementName = "MDM_ID")]
    public string MdmId { get; set; }
    [XmlElement(ElementName = "fullName")]
    public string Name { get; set; }
    [XmlElement(ElementName = "DNV_Status")]
    public string Status { get; set; }
    public bool Active
    {
        get
        {
            return Status == "Active";
        }
    }
    [XmlArray("addressList")]
    [XmlArrayItem("address")]
    public AffinitasClientAddress[] Addresses { get; set; }
    [XmlElement(ElementName = "lastUpdatedByTimestamp")]
    public DateTime LastUpdateDate { get; set; }
    //[XmlElement(ElementName = "Updated")]
    //public DateTime LastUpdateDate { get; set; }
}
[Serializable]
[XmlRoot(ElementName = "address")]
[XmlType("address")]
public class AffinitasClientAddress
{
    [XmlElement(ElementName = "AFFRowID")]
    public string RowId { get; set; }
    [XmlElement(ElementName = "MDM_ID")]
    public string MdmId { get; set; }
    [XmlElement(ElementName = "addrType")]
    public string AddressType { get; set; }
    [XmlElement(ElementName = "addrStatus")]
    public string Status { get; set; }
    public bool Active
    {
        get
        {
            return Status == "Active";
        }
    }
    [XmlElement(ElementName = "addrLine1")]
    public string Address1 { get; set; }
    [XmlElement(ElementName = "addrLine2")]
    public string Address2 { get; set; }
    [XmlElement(ElementName = "city")]
    public string City { get; set; }
    [XmlElement(ElementName = "postalCode")]
    public string PostalCode { get; set; }
    [XmlElement(ElementName = "country")]
    public string Country { get; set; }
    [XmlElement(ElementName = "validCountryISO2")]
    public string CountryCode { get; set; }
    [XmlElement(ElementName = "lastUpdatedByTimestamp")]
    public DateTime LastUpdateDate { get; set; }
}

反序列化不会引发任何异常,但Clients数组为null。有什么想法我该怎么解决吗?我已经试了几个小时了,但我想不通。

XML反序列化;t初始化数组元素

您的AffinitasClientRoot类应该是这样的:

public class AffinitasClientRoot
{
    [XmlArray("customerList", Namespace="")] // here!!!!
    [XmlArrayItem("customer")]
    public AffinitasClient[] Clients { get; set; }
}

即,插入Namespace=""声明以从"命名命名空间"切换回"无名称命名空间"。