0

私のプロジェクトでは、wcf によって公開されているビュー モデル City があります。
プロパティの 1 つは、既に公開されているコントラクトとは異なる名前が付けられています。
したがって、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 属性を取得していないようで、CityName プロパティの代わりに SelectedTranslation プロパティを受け取ります。

私は何が欠けていますか?

更新ServiceContract の設定を削除すると、datamember 属性が正しく使用さ
れていることがわかりました 。XmlSerializerFormat(Style:=OperationFormatStyle.Rpc)RPC XmlSerializer にバグがあるのではないかと思いますか?

4

1 に答える 1

1

WCF には、DataContractSerializer(DCS) とXmlSerializer. 前者は (System.Runtime.Serialization 名前空間から)<DataContract>やなどの属性を理解します。<DataMember>後者は、 System.Xml.Serialization 名前空間の属性 ( 、 など) を理解します<XmlElement><XmlAttribute>コントラクトを で装飾すると<XmlSerializerFormat>、WCF に を使用するXmlSerializerように指示されるため、DCS 固有の属性はすべて無視されます (DCS はデフォルト)。

の使用中に要素名を変更したい場合は、属性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 に答える