WCF存储行为与对象序列化

时间:2013-10-18 11:42:06

标签: wcf serialization datacontract wcf-serialization

最近我在WCF序列化中遇到了一个奇怪的行为。

它是一个简单的服务,它公开一个操作契约并返回一个类的对象(该类没有用[Serializable]或[DataContract]属性修饰。

然而,当我从客户端调用此操作时,它工作正常,消费者会收到该类的对象(其中包含实际数据)。

据我所知,它不应该通过电汇传递,因为它无法序列化,如果我遗失了某些内容,请告诉我。

代码示例

 public class MyService:IService
{      

    public Person GetPerson()
    {
        Person person = new Person();
        person.Name = "Brian";
        return person;
    }


}



public class Person 
{

    public string Name { get; set; }      

}

<services>

  <service name="MyService">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/MyService"/>
      </baseAddresses>
    </host>

    <endpoint address="TestService1"
              binding="basicHttpBinding"
              contract="BindingTestServer.IService" ></endpoint>

  </service>
</services>
   <behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>

1 个答案:

答案 0 :(得分:0)

由于很多程序员都被[DataContract]和[DataMember]属性所淹没,微软让数据契约序列化程序处理所有类 - 即使没有任何属性 - 就像旧的XML序列化程序一样。

因此,您不必再添加数据协定或数据成员属性 - 如果不这样做,那么数据协定序列化程序将序列化您的类上的所有公共属性,就像XML序列化程序一样。