1

POCO を使用して、エンティティを DAL プロジェクトからエンティティ プロジェクトに自動生成しています。現在、ビュー クラスを手動で作成する必要はありません。

ただし、1 つの問題があります。ナビゲーション プロパティを持つ poco オブジェクトを返そうとすると[WebMethod]、次のエラーが発生します。

Cannot serialize member Entities.City.Customers of type System.Collections.Generic.ICollection1[[Entities.Customer, Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] because it is an interface.

書い context.ContextOptions.LazyLoadingEnabled = false;て みcontext.ContextOptions.ProxyCreationEnabled = false;ましたがダメでした。

プロパティの前に追加 [System.Xml.Serialization.XmlIgnore]すると、エラーは発生しませんが、それらのプロパティが失われますか?

4

1 に答える 1

2

Entities.City.Customersメッセージは明確です:メンバーがインターフェイス ( ) として宣言されているため、シリアル化は失敗しますICollection

インターフェイスは、実装する型については何も言いません。実装が従うべきコントラクトを定義するだけです。そのため、シリアライザーは実装をシリアライズされた形式で表現する方法を知りません。

イントロスペクションから取得した情報に基づいて型を反映してシリアライズすることはそれほど難しくないと思うかもしれませんが、この表現からデシリアライズしようとすると問題が発生します。同じ表現がすべての実装タイプに対応する可能性があります。その場合、シリアライザーは具体的なタイプとして何を選択する必要がありますか?

この制限を回避するには、次の投稿で確認できるように、いくつかの手順があります:インターフェイス プロパティの XML シリアル化。あなたの特定のケースでは、最も簡単な方法は、の代わりにEntities.City.Customers具体的な型のメンバーを作成することです。List<Customer>ICollection<Customer>

于 2012-09-02T15:13:12.937 に答える