nHibernate、Spring、WCFを一緒に使用しようとしています。私はOrder
オブジェクトを持っています、そしてそれはオブジェクトを含んでいCustomer
ます。
findOrder
サービスでWCFメソッドを呼び出すことができますが、 Order
'sフィールドにアノテーションCustomer
がない場合、Webサービスは必要なものを返します。ただし、予想どおり、詳細は含まれていません。DataMember
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 = "";
...
}