0

json.netを使用してjsonを出力するASPMVCWebApiプロジェクトがあります。たとえば、次のモデルがあります。

public class ModelA
{
    public int Id {get;set;}
    public string Name {get;set;}

    [JsonIgnore]
    public int TypeModelId {get;set;}
    public virtual TypeModel TypeModel {get;set;}
}

public class TypeModel
{
    [JsonIgnore]
    public int Id {get;set;}

    public string Name {get;set;}

    [JsonIgnore]
    public virtual IList<ModelA> ModelAs {get;set;}
}

シリアル化するとModelA、出力は次のようになります。

[
  {
    "Id": 1,
    "Name": "test",
    "TypeModel": {
      "Name": "testtype1"
    }
  }
]

json.netを使用してこのような出力を得ることができますか?

[
  {
    "Id": 1,
    "Name": "test",
    "TypeModel": "testtype1"
  }
]

ModelA..または、リレーションを参照ではなく文字列として格納する新しいクラスにコンテンツをコピーする必要がTypeModelありますか?たぶんもっと良い解決策がありますか?

4

2 に答える 2

1

あなたが言うように、これを行う唯一の方法はDTOを使用することです。これは、ご指摘のとおり、TypeModel の型がTypeModel文字列ではなくクラスであるためです。Linq を使用している場合は、次の方法で匿名型を使用することもできます。

return db.ModelAs.Single(x=>x.Id == id).Select(x=> new{
    x.Id,
    x.Name,
    TypeModel = x.TypeModel.Name
});
于 2012-10-25T09:35:45.953 に答える
0

実際にはそうではありません。json.net はループ参照処理を処理できます。dto は古い方法ですが、mvc5 であり、mvc4 である限り、ループ参照を処理するオプションをシリアライザーで有効にすることができます。詳細はこちら: https://stackoverflow.com/a/23044770/1345207

于 2014-04-13T15:34:19.310 に答える