控制Web服务序列化

时间:2015-05-22 15:45:54

标签: c# xml web-services serialization

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

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&gt; 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>

1 个答案:

答案 0 :(得分:1)

您要使用的属性是:

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

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

  3. 因此:

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