我有一个使用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属性。
非常感谢您的帮助。
谢谢, 泰勒
答案 0 :(得分:1)
我们的应用程序中内置了许多属性,可以完全重命名或完全隐藏应用程序的用户。
标准方法是创建特殊的数据传输对象(DTO)。或者几个。
答案 1 :(得分:0)
我知道这看起来像是一个警察,但由于你的对象属性名称是动态的,为什么不只是使用属性bagging而不是这个XMLSerializer shuffle?