C#MVC4 Web API - 生成的JSON应该返回对象而不是$ ref对象

时间:2012-06-28 03:04:28

标签: json asp.net-mvc-4 asp.net-web-api ref

我有一个使用EntityFramework for ORM的ASP.NET MVC 4 Web API应用程序。

在我返回的JSON中,在某些情况下,多个父节点存在相同的子节点。在这些情况下,第一次出现的子节点对所有成员都是完全可见的。任何后续出现都会显示为第一次出现的$ ref。 我想在每次返回的JSON中看到完整的对象。

例如,而不是看到:

    [{
    "$id": "1",
    "userId": 1,
    "Badge": {
        "$id": "2",
        "badgeId": 1,
        "badgeName": "Gold"
        }
    }, {
    "$id": "3",
    "userId": 2,
    "Badge": {
        "$ref": "2"
        }
    }]

我想看看:

    [{
    "$id": "1",
    "userId": 1,
    "Badge": {
        "$id": "2",
        "badgeId": 1,
        "badgeName": "Gold"
        }
    }, {
    "$id": "3",
    "userId": 2,
    "Badge": {
        "$id": "4",
        "badgeId": 1,
        "badgeName": "Gold"
        }
    }]

基本上我想摆脱JSON中的任何“$ ref”。有办法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

一种简单的方法是编辑生成的实体类代码。对于每个实体类,将分配[DataContract(IsReference=true)]属性。

如下所示:

[EdmEntityTypeAttribute(NamespaceName="YourNamespace", Name="YourEntity")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class YourEntity : EntityObject
{

将其更改为IsReference=false。这应该可以解决问题。

答案 1 :(得分:0)

在我的情况下,我使用的是实体模型,我只是为.edmx图表表中的唯一字段设置了实体关键字。