控制 Web 服务序列化
Controlling Web Service Serialization
在我的网络服务中,我有以下 class
public class ContactDetails
{
public string Name { get; set; }
public string Address { get; set; }
public string Postcode { get; set; }
public List<string> PhoneNumber { get; set; }
}
其中,按原样,returns下面的数据在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>
显然,我们希望 phone 号码在 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>
但是如您所见,我们现在已经丢失了 phone 个数字的嵌套......所需的输出将是:
<ContactDetails>
<Name>MR SMITH</Name>
<Address>I HIGH STREET, SOMETOWN</Address>
<PC>AA1 2BB</PC>
<PhoneNumbers>
<PhoneNumber></PhoneNumber>
<PhoneNumber></PhoneNumber>
</PhoneNumbers>
</ContactDetails>
您要使用的属性是:
XmlArrayAttribute
-- 控制二级列表的外层名称。
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; }
}
在我的网络服务中,我有以下 class
public class ContactDetails
{
public string Name { get; set; }
public string Address { get; set; }
public string Postcode { get; set; }
public List<string> PhoneNumber { get; set; }
}
其中,按原样,returns下面的数据在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>
显然,我们希望 phone 号码在 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>
但是如您所见,我们现在已经丢失了 phone 个数字的嵌套......所需的输出将是:
<ContactDetails>
<Name>MR SMITH</Name>
<Address>I HIGH STREET, SOMETOWN</Address>
<PC>AA1 2BB</PC>
<PhoneNumbers>
<PhoneNumber></PhoneNumber>
<PhoneNumber></PhoneNumber>
</PhoneNumbers>
</ContactDetails>
您要使用的属性是:
XmlArrayAttribute
-- 控制二级列表的外层名称。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; }
}