0

在我的项目中,我有一个由 wcf 公开的视图模型 City。
其中一个属性的名称与已经公开的合同规定的名称不同。
因此,我添加了 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 可能有问题?

4

1 回答 1

1

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

如果要在使用 时更改元素名称XmlSerializer,可以使用<XmlElement>属性:

<XmlType(Namespace:=ServiceNamespace)> _
Public Class City
    private mySelectedTranslation as String
    <XmlElement(ElementName:="CityName")> _
    Public Property SelectedTranslation() As String
          Get
              Return mySelectedTranslation
          End Get
          Set (ByVal value As String)
              mySelectedTranslation = value
          End Set
      End Property
End Class
于 2012-01-04T17:17:42.457 回答