使用“自动”属性标记类型会将生成的字段生成为WCF客户端代理代码上的成员

时间:2010-08-02 00:10:31

标签: c# wcf

我的DTO类型声明如下:

[Serializable]
public class PersonDTO
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

我有一个WCF服务,其操作合同如下所示:

[OperationContract]
public PersonDTO GetPerson(int id);

我遇到的问题是当我使用“添加服务引用”来使用此服务时,wsdl包含如下内容:

<xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/Test.DTO">
−
   <xs:complexType name="PersonDTO">
−
      <xs:sequence>
          <xs:element name="_x003C_Id_x003E_k__BackingField" nillable="true" type="xs:int"/>
          <xs:element name="_x003C_FirstName_x003E_k__BackingField" nillable="true" type="xs:string"/>
          <xs:element name="_x003C_LastName_x003E_k__BackingField" nillable="true" type="xs:string"/>
      </xs:sequence>
   </xs:complexType>
   <xs:element name="IVQueueDTO" nillable="true" type="tns:IVQueueDTO"/>
</xs:schema>

当我尝试在WCF客户端上引用时,而不是获取person.Id和person.FirstName,而不是获取person.Idk__BackingField,person.FirstNamek_BackingField等。

我应该怎样做才能获得我在WCF服务端定义的确切类型?我在PersonDTO上使用Serializable属性,因为这个服务需要与java互操作。我正在使用.NET Framework 4.0,C#,Visual Studio 2010,Win XP SP3。 WCF服务公开http端点并使用basicHttpBinding。

2 个答案:

答案 0 :(得分:2)

您是否尝试过使用DataContact和DataMember属性而不是Serializable?我相信它仍然会为您提供Java可以访问的可序列化对象。

答案 1 :(得分:0)

DataContact解决了这个问题。但我不确定DataContract是否可与Java互操作。我还要测试一下。但我很确定上述问题是由Serializable属性引起的。看看这个链接。这让我相信DataContract应该可以互操作。

WCF Data Contracts and "k__BackingField" Property Naming