最近我在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>
答案 0 :(得分:0)
由于很多程序员都被[DataContract]和[DataMember]属性所淹没,微软让数据契约序列化程序处理所有类 - 即使没有任何属性 - 就像旧的XML序列化程序一样。
因此,您不必再添加数据协定或数据成员属性 - 如果不这样做,那么数据协定序列化程序将序列化您的类上的所有公共属性,就像XML序列化程序一样。