Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is the Web Api returning empty json results with "$ref="?

I disabled lazy loading and proxy creation in EF5 before returning any results in the Web Api. Everything worked fine. However, when i start to Include() other entities for eager fetching, some of the JSON objects look like this:

{
$ref: "14"
},
.. correct objects ..
{
$ref: "6"
},
..

What is this "$ref" that gets included in the list of results?

like image 638
Dante Avatar asked Feb 04 '13 07:02

Dante


2 Answers

It's coming from the JSON.NET serializer. It's preserving object references. Take a look at the following blog post. I guess you have some circular references in your object graph and JSON.NET is doing it's best in a desperate effort to serialize this EF structure without crashing (which is what most JSON serializers would do anyway). It's not a standard though.

Personal advice: never serialize your EF entities. Always define view models and have your Web API methods return view models containing only the properties you are interested in.

like image 179
Darin Dimitrov Avatar answered Nov 16 '22 13:11

Darin Dimitrov


You can also disable lazyloading if you have to serialize your EF entities. it's worked for me.

Go to the context.cs file under your edmx file and add this Line in the constructor.

this.Configuration.LazyLoadingEnabled = false;

like image 39
1rockfeller Avatar answered Nov 16 '22 14:11

1rockfeller