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

C#MVC4 Web API-生成的JSON应该返回对象,而不是$ref到对象,json,asp.net-mvc-4,asp.net-web-api,ref,Json,Asp.net Mvc 4,Asp.net Web Api,Ref,我有一个ASP.NET MVC 4 Web API应用程序,使用EntityFramework for ORM 在JSON I返回中,在某些情况下,多个父节点存在相同的子节点。在这些情况下,子节点的第一次出现对其所有成员都是完全可见的。任何后续事件都显示为第一个事件的$ref。 相反,我希望每次在返回的JSON中显示完整对象时都能看到它 例如,不要看到: [{ "$id": "1", "userId": 1, "Badge": { "$id": "

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

在JSON I返回中,在某些情况下,多个父节点存在相同的子节点。在这些情况下,子节点的第一次出现对其所有成员都是完全可见的。任何后续事件都显示为第一个事件的$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”。有办法吗


谢谢

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

如下所示:

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

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

在我的例子中,我使用的是实体模型,我只需在.edmx图表表中为唯一字段设置一个实体键。

很抱歉,我花了很长时间才做出响应。我不知道有答案。当时我采用的解决方法是在返回对象之前,在webservice中将对象的某些成员显式设置为null。我也会尝试一下这个解决方案。谢谢有没有办法用fluent API而不是属性来实现这一点?