2012-06-28 23 views
7

Tengo una aplicación ASP.NET MVC 4 Web API que utiliza EntityFramework para ORM.

En el JSON que devuelvo, hay algunos casos donde el mismo nodo hijo está presente para varios nodos principales. En estos casos, la primera aparición del nodo secundario es completamente visible con todos sus miembros. Cualquier aparición posterior aparece como $ ref para la primera ocurrencia. Me gustaría ver el objeto completo cada vez que aparece en el JSON devuelto.

Por ejemplo, en lugar de ver:

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

me gustaría ver:

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

Básicamente quiero para deshacerse de cualquier "$ ref" en el JSON. ¿Hay alguna manera?

Gracias!

Respuesta

1

Una manera fácil es editar el código de las clases de entidades generadas. Para cada una de las clases de entidad, se asignará un atributo [DataContract(IsReference=true)].

algo como lo siguiente:

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

cambiarlo a IsReference=false. Eso debería hacer el truco.

+0

lo siento, me tomó mucho tiempo para responder. No sabía que había una respuesta. La solución alternativa a la que recurrí en ese momento fue establecer explícitamente que algunos de los miembros del objeto anularan el servicio web antes de devolverlo. Le daré una oportunidad a esta solución. ¡Gracias! – niltoid

+0

¿Hay alguna manera de hacer esto con la API fluida en lugar de atributos? – BlackICE

Cuestiones relacionadas