最近我在WCF序列化中遇到了一个奇怪的行为 .
它是一个简单的服务,它公开一个操作 Contract 并返回一个类的对象(这个类没有用[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 回答
由于许多程序员对[DataContract]和[DataMember]属性不堪重负,因此Microsoft使数据 Contract 序列化程序处理所有类 - 即使没有任何这些属性 - 就像旧的XML序列化程序一样 .
因此,您不必再添加数据协定或数据成员属性 - 如果不这样做,那么数据协定序列化程序将序列化您的类上的所有公共属性,就像XML序列化程序一样 .