2012-06-28 22 views
7

Mam aplikację sieci Web ASP.NET MVC 4 Web przy użyciu EntityFramework dla ORM.

W powrocie JSON, istnieją pewne przypadki, w których ten sam węzeł podrzędny jest obecny dla wielu węzłów nadrzędnych. W takich przypadkach pierwsze wystąpienie węzła potomnego jest w pełni widoczne dla wszystkich jego członków. Każde kolejne wystąpienie pojawia się jako $ ref do pierwszego wystąpienia. Chciałbym zamiast tego zobaczyć cały obiekt za każdym razem, gdy pojawi się w zwrócony JSON.

Na przykład, zamiast zobaczyć:

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

chciałbym zobaczyć:

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

Zasadniczo chcę pozbyć się "$ ref" w JSON. Czy istnieje sposób?

Dzięki!

Odpowiedz

1

Łatwym sposobem jest edycja wygenerowanego kodu klas jednostek. Dla każdej z klas jednostek zostanie przypisany atrybut [DataContract(IsReference=true)].

Coś jak następuje:

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

go zmienić na IsReference=false. To powinno wystarczyć.

+0

Przepraszam, że zajęło mi to na zawsze odpowiedź. nie wiedziałem, że istnieje odpowiedź. obejściem, o którym wówczas opowiadałem, było jawne ustawienie niektórych elementów obiektu na wartość null w usłudze internetowej przed zwróceniem go. Dam też to rozwiązanie. dzięki! – niltoid

+0

Czy można to zrobić za pomocą płynnego interfejsu API zamiast atrybutów? – BlackICE