6

これは非常に単純なWebAPIプロジェクトです。データモデル、生成されたDbContext、およびコントローラーがあります。

モデルクラスの特定のプロパティに属性を追加し、[JsonIgnore]後でデータモデルに変更を加えると、モデルクラスが再生成され、[JsonIgnore]属性が削除されます。これが発生する理由と、自動生成されたクラスに属性を追加するべきではないことを理解しています。私の質問は、[JsonIgnore]ASP.NET Web APIで使用する場合のように、属性でクラスに注釈を付ける必要がある場所です。

ASP.NET Web API 4、RTW

4

2 に答える 2

6

ビューモデルを使用する必要があります。基本的には、公開する必要のあるプロパティのみを含むクラスを定義し、Web API アクションからそれらのビュー モデルを返します。このようにして、ドメイン モデルを属性で汚染することを心配する必要はありません。[JsonIgnore]特に、これらのプロパティを特定のアクションでのみ無視したくない場合はそうです。ドメイン モデルとビュー モデルの間のマッピングを簡素化するには、AutoMapperを参照してください。

于 2012-08-24T13:35:51.537 に答える
3

非常に単純な Web API プロジェクトを作成していると明示的に述べているため、単純なグローバル置換で回避できる可能性があります。ASP.NET Web API を使用するようにプロジェクトを変換しているときに、同じ問題に遭遇しました。データベース スキーマを定期的に変更していたため、動的または厳密に型指定されたビュー モデルではなく、元の型を返す方が簡単でした。これは、ラップされるデータのプロパティが常に変化していたためです。

シリアル化のために無視する必要があるプロパティは、EF によって生成されたすべてのナビゲーション プロパティです。これらすべてのプロパティが仮想であることも起こります。すべてpublic virtual[Newtonsoft.Json.JsonIgnore] public virtual.

プロジェクトがまだ開発中である間にテストできるようにするための迅速かつ簡単な修正。最終的には、おそらく EF モデルをビュー モデルにラップする必要があることに同意しますが、この単純な方法を使用すると、ビュー モデルがなくても作業を続けることができます。

于 2012-10-10T16:06:22.967 に答える