Asd*_*dfg 7 wcf constructor datacontract
我有两个课程如下:
[DataContract]
public class Address
{
[DataMember]
public string Line1
[DataMember]
public string Line2
[DataMember]
public string City
[DataMember]
public string State
[DataMember]
public string Zip
}
[DataContract]
public class Customer
{
public Customer()
{
CustomerAddress = new Address();
}
[DataMember]
public string FirstName
[DataMember]
public string LastName
[DataMember]
public Address CustomerAddress
}
Run Code Online (Sandbox Code Playgroud)
如果我生成使用Customer类的服务代理,会发生什么?如果我理解正确的概念,那么我认为Customer类中的构造函数不会在客户端调用,它可能会给出不同的行为.
我如何摆脱Customer类中的构造函数,仍然具有CustomerAddress类型的属性Address,使其表现为一个愚蠢的DTO对象?
人们用来避免这种情况的一般准则或最佳做法是什么?
如果您使用默认值DataContractSerializer来序列化对象,那么,是的,您的构造函数未被序列化,并且当反序列化对象时,客户端将不会调用您可能具有的任何逻辑.
关于你关于删除构造函数逻辑和Address填充嵌套类的问题,将由你来处理DataContractSerializer.如果我有这样的代码:
Customer c = new Customer() {
FirstName = "David",
LastName = "Hoerster",
CustomerAddress = new Address() {
Line1 = "1 Main Street",
City = "Smallville",
State = "AA",
Zip = "12345"
}
};
Run Code Online (Sandbox Code Playgroud)
然后从服务方法返回该Customer对象,该对象将与Address信息一起正确序列化.生成的客户端上的代理将知道Address并将能够反序列化来自服务方法的流以正确构建Customer对象.你Customer将是一个虚拟的DTO - 没有逻辑,只有属性.
查看Aaron Skonnard 关于WCF序列化的MSDN文章,其中他谈到了DataContractSerializer.