我正在尝试一起使用 nHibernate、Spring 和 WCF。我有一个Order
对象,其中包含一个Customer
对象。
我可以在我的服务上调用 WCF 方法findOrder
,并且提供Order
'Customer
字段没有DataMember
注释,Web 服务返回Order
我想要的。Customer
正如预期的那样,它不包含详细信息。
但是当我尝试包含时Customer
,WebService 失败,并查看 WCF 跟踪日志,我可以看到这个错误:
System.Runtime.Serialization.SerializationException:类型 'DecoratorAopProxy_95d4cb390f7a48b28eb6d7404306a23d' 与数据合同名称 'DecoratorAopProxy_95d4cb390f7a48b28eb6d7404306a23d:http://schemas.datacontract.org/2004/07/' 不是预期的。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中
Order
很确定这是因为客户包含额外的 nHibernate 详细信息,但我不明白为什么 WCF 很乐意发送Customer
.
谁能帮我理解?
订单对象
[DataContract]
[KnownType(typeof(Customer))]
public class Order
{
// Standard properties
[DataMember]
public virtual int Id { get; set; }
public virtual Enums.OrderStatus Status { get; set; }
[DataMember]
[StringLength(20, ErrorMessage = "Order name must not be more than 20 characters long")]
public virtual string Name { get; set; }
[DataMember]
public virtual Customer Customer { get; set; }
[DataContract]
...
}
客户对象
public class Customer
{
public virtual int CustomerId { get; set; }
[DataMember]
private string name = "";
...
}