【问题标题】:DataMember name property is ignored in webservice在 Web 服务中忽略 DataMember 名称属性
【发布时间】:2012-02-02 08:20:28
【问题描述】:

在我的项目中,我有一个由 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 可能有问题?

【问题讨论】:

    标签: .net vb.net wcf datamember


    【解决方案1】:

    WCF 中有两个默认的 XML 序列化程序:DataContractSerializer (DCS) 和 XmlSerializer。前者理解 &lt;DataContract&gt;&lt;DataMember&gt; 等属性(来自 System.Runtime.Serialization 命名空间)。后者理解来自 System.Xml.Serialization 命名空间的属性,例如&lt;XmlElement&gt;&lt;XmlAttribute&gt; 等。当你用&lt;XmlSerializerFormat&gt; 装饰你的合同时,你告诉WCF 使用XmlSerializer,所以它会忽略任何 DCS 特定属性(DCS 是默认属性)。

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

    <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
    

    【讨论】:

      猜你喜欢
      • 2016-02-10
      • 2012-06-18
      • 2019-02-22
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多