0

我有一个使用 json.net 输出 json 的 ASP MVC Web Api 项目。例如,我有以下模型:

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;}
}

当我序列化 a 时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

Actually this is not true, json.net can handle loop reference handling, dto is an old method, still good, but you can enable in the serializer the option to handle loopreferences as long as it is mvc5 and maybe also mvc4. More details here: https://stackoverflow.com/a/23044770/1345207

于 2014-04-13T15:34:19.310 回答