Web服务中忽略DataMember名称属性

时间:2012-01-04 12:18:26

标签: .net vb.net wcf datamember

在我的项目中,我有一个由wcf公开的视图模型城市 其中一个属性的名称与已经暴露的合同所规定的不同 因此,我添加了DataMember属性并设置了Name值,如下所示:

<DataContract(Namespace:=ServiceNamespace)> _ 
Public Class City
    private mySelectedTranslation as String
    <DataMember(Name:="CityName")> _
    Public Property SelectedTranslation() As String
          Get
              Return mySelectedTranslation
          End Get
          Set (ByVal value As String)
              mySelectedTranslation = value
          End Set
      End Property
End Class

在我的消费测试项目中,服务引用似乎没有获取DataMember属性,但是接收SelectedTranslation属性而不是CityName属性。

我错过了什么?

更新
我发现当我删除ServiceContract的XmlSerializerFormat(Style:=OperationFormatStyle.Rpc)设置时,正确使用了datamember属性。我认为RPC XmlSerializer可能会被窃听?

1 个答案:

答案 0 :(得分:1)

WCF中有两个默认的XML序列化程序:DataContractSerializer(DCS)和XmlSerializer。前者理解<DataContract><DataMember>等属性(来自System.Runtime.Serialization命名空间)。后者理解System.Xml.Serialization命名空间中的属性,例如<XmlElement><XmlAttribute>等。当您使用<XmlSerializerFormat>装饰合同时,您告诉WCF使用{ {1}},因此它将忽略任何特定于DCS的属性(DCS是默认值)。

如果您想在使用XmlSerializer时更改元素名称,可以使用XmlSerializer属性:

<XmlElement>
相关问题