Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# MVC4 Web API - Resulting JSON should return objects instead of $ref to object

I have an ASP.NET MVC 4 Web API app using EntityFramework for ORM.

In the JSON I return, there are some cases where the same child node is present for multiple parent nodes. In these cases, the first occurrence of the child node is fully visible with all it's members. Any subsequent occurrence shows up as a $ref to the first occurrence. I'd like instead to see the full object everytime it shows up in the JSON returned.

For example, instead of seeing:

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

i'd like to see:

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

Basically I want to get rid of any "$ref" in the JSON. Is there a way?

Thanks!

like image 869
niltoid Avatar asked Jun 28 '12 03:06

niltoid


1 Answers

An easy way is to edit the generated entity classes code. For each of the entity classes, there will be a [DataContract(IsReference=true)] attribute assigned.

Something like the following:

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

Change it to IsReference=false. That should do the trick.

like image 151
Amry Avatar answered Sep 29 '22 19:09

Amry