【发布时间】:2011-08-07 18:35:56
【问题描述】:
我有一个使用 basicHttpBinding 的 WCF 服务。在服务方法上,我有一个返回的类,对于这个类,我需要动态/以编程方式排除属性并更改 XML 的属性名称。这需要在 WSDL 中以及在调用服务方法时完成。
我已经搜索了最佳解决方案,看来我需要 (1) 将 XmlAttributeOverrides 与 XmlSerializer 一起使用,或者 (2) 在需要自定义的类上实现 IXmlSerializable。或者可能有更好的解决方案。我知道可以将属性名称+“指定”添加到类中,然后可以排除这些属性。但是,这并不排除在 WSDL 中,也不能解决属性重命名问题。
我为什么要这个?因为我们的应用程序的全球化和定制化。我们的应用程序中内置了许多属性,这些属性可能会被重命名或对应用程序的用户完全隐藏。
经过大量研究,我最好的选择是用我自己的自定义序列化程序替换 WCF 序列化程序。但是,我从来没有找到如何为使用 XmlSerializer 的自定义类执行此操作的好示例。此外,我不确定如何为特定类传递 XmlAttributeOverrides。
另外,对于其他想要相同功能的人来说可能不是这种情况,但在我的应用程序中,我只需要在应用程序的生命周期内初始化一次值。太糟糕了 C# 不允许静态只读变量与属性一起使用。
这是一个简单的类示例:
public Customer
{
public string Address1
{
get;
set;
}
public string Address2
{
get;
set;
}
public string Zipcode
{
get;
set;
}
}
在本例中,我想为应用程序的某些安装使用 PostalCode 而不是 Zipcode 并隐藏 Address2 属性。
非常感谢您的帮助。
谢谢, 泰勒
【问题讨论】:
标签: c# xml wcf xmlserializer