【发布时间】:2012-05-08 06:00:08
【问题描述】:
我正在尝试同时使用 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 的已知类型列表
很确定这是因为客户包含额外的 nHibernate 详细信息,但我不明白为什么 WCF 会乐意发送 Order,而不是 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 = "";
...
}
【问题讨论】:
标签: wcf nhibernate spring.net