0

最近我在 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>

4

1 回答 1

0

由于许多程序员对 [DataContract] 和 [DataMember] 属性感到不知所措,微软让数据协定序列化程序处理所有类——即使没有任何这些属性——就像旧的 XML 序列化程序一样。

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

于 2013-10-21T06:12:47.150 回答