【问题标题】:Controlling Web Service Serialization控制 Web 服务序列化
【发布时间】:2015-05-22 15:45:53
【问题描述】:

在我的网络服务中,我有以下类

public class ContactDetails
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string Postcode { get; set; }
    public List<string> PhoneNumber { get; set; }
}

在 XML 输出中返回以下数据

<ContactDetails>
    <Name>MR SMITH</Name>
    <Address>I HIGH STREET, SOMETOWN</Address>
    <Postcode>AA1 2BB</Postcode>
    <PhoneNumber>
        <string>01234 567890</string>
        <string>01234 567890</string>
    </PhoneNumber>
</ContactDetails>

显然,我们希望电话号码在 PhoneNumbers>PhoneNumber 中的结构更合理,但似乎无法完全正确。

我们添加了 XmlElement 标记,它几乎就在那里;这样

public class ContactDetails
{
    public string Name { get; set; }
    public string Address { get; set; }
    [XmlElement(ElementName = "PC")]
    public string Postcode { get; set; }
    [XmlElement(ElementName = "PhoneNumber")]
    public List<string> PhoneNumber { get; set; }
}

产生以下内容

<ContactDetails>
    <Name>MR SMITH</Name>
    <Address>I HIGH STREET, SOMETOWN</Address>
    <PC>AA1 2BB</PC>
    <PhoneNumber></PhoneNumber>
    <PhoneNumber></PhoneNumber>
</ContactDetails>

但正如你所见,我们现在已经失去了电话号码的嵌套......所需的输出将是:

<ContactDetails>
    <Name>MR SMITH</Name>
    <Address>I HIGH STREET, SOMETOWN</Address>
    <PC>AA1 2BB</PC>
    <PhoneNumbers>
        <PhoneNumber></PhoneNumber>
        <PhoneNumber></PhoneNumber>
    </PhoneNumbers>
</ContactDetails>

【问题讨论】:

    标签: c# xml web-services serialization


    【解决方案1】:

    您要使用的属性是:

    1. XmlArrayAttribute -- 控制两级列表的外部名称。

    2. XmlArrayItemAttribute - 控制两级列表的内部名称。

    因此:

    public class ContactDetails
    {
        public string Name { get; set; }
        public string Address { get; set; }
        public string Postcode { get; set; }
        [XmlArray("PhoneNumbers")]
        [XmlArrayItem("PhoneNumber")]
        public List<string> PhoneNumber { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 2012-05-06
      • 2010-10-14
      相关资源
      最近更新 更多