如何在WCF中使用XmlAttributeOverrides

时间:2011-08-07 07:19:40

标签: c# xml wcf xmlserializer

我有一个使用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属性。

非常感谢您的帮助。

谢谢, 泰勒

2 个答案:

答案 0 :(得分:1)

  

我们的应用程序中内置了许多属性,可以完全重命名或完全隐藏应用程序的用户。

标准方法是创建特殊的数据传输对象(DTO)。或者几个。

答案 1 :(得分:0)

我知道这看起来像是一个警察,但由于你的对象属性名称是动态的,为什么不只是使用属性bagging而不是这个XMLSerializer shuffle?