2012-01-04 88 views
0

在我的項目中,我有一個由wcf公開的視圖模型City。
其中一個屬性的名稱與已經公開的合同規定的名稱不同。
所以我增加了數據成員的屬性,並將名稱設置值,像這樣:在webservice中忽略DataMember名稱屬性

<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 

在我消費的測試項目中的服務引用似乎並沒有挑上的數據成員屬性但並接收SelectedTranslation屬性,而不是CityName屬性。

我錯過了什麼?

UPDATE
我發現,當我刪除的ServiceContract的XmlSerializerFormat(Style:=OperationFormatStyle.Rpc)設置,數據成員屬性被正確使用。我在想RPC XmlSerializer可能會被竊聽?

回答

1

在WCF中有兩個用於XML的默認序列化程序:DataContractSerializer(DCS)和XmlSerializer。前者理解屬性,如<DataContract><DataMember>(來自System.Runtime.Serialization命名空間)。後者理解來自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 
相關問題