问题描述
我有一个使用实体框架4的MVC-3(RC1)应用程序。我希望从控制器操作返回一个JSON对象。此对象由其他对象引用,这显然返回引用。
因此,我收到以下循环引用错误:
在
中检测到循环引用,同时序列化$ b类型的对象$ b'Application.Models.ReferenceObject'。
描述:执行
当前Web请求期间发生未处理的异常
。请查看
堆栈跟踪以获取有关
错误的更多信息,以及它在
中的代码。
异常详细信息:
System.InvalidOperationException:检测到
循环引用,而
序列化
' Application.Models.ReferenceObject'。
注意:应用& ReferenceObject 显然是实际命名空间/对象的替换。
根据,这可以用JSON.Net来克服;但是我想避免这种情况,而是尝试从被序列化的对象中排除违规引用属性。
我是什么意思?
我想做这样的事情:
IList< ReferenceObject> list = Repository.GetReferenceObjects();
return Json(list。**< method> **(ObjectsReferencingThis));
其中 **< method> **
是一些与方法和 ObjectsReferencingThis
是导致循环引用。
注意:我不希望删除这些属性或创建POCO,因为这仅影响Json序列化。 >
任何人都可以帮助吗?
:)
当我以前的项目之一工作时,我遇到了类似的问题。
这是我最后做的:
IList< Product> list = Repository.GetProducts();
var collection = products.Select(product => new
{
id = product.Id,
name = product.Name,
detailUrl = product.DetailUrl ,
imageLargeUrl = product.ThumbNailUrl,
tagtitle = product.Name.ToUpper(),
tagheader =我们珍惜的顾客用来描述这个产品的话,
tagwords = from标签在product.Tags组标签通过tag.Name到单词中选择新的{name = words.Key,weight = words.Count()}
});
var result = new {id = inquiry.Id,products = collection,};
返回this.Jsonp(result);
Json的结果如下:
{
id:2,
products:[{
id:3605970008857,
name:TITLE1,
detailUrl:http://www.urlhere.com,
tagwords:[{
name:roses
weight:1
},
{
name:cotton,
weight:1
},
{
name:happy,
weight:1
}]
},
{
id:3605970019891 ,
name:TITLE2,
detailUrl:http://www.urlhere.com,
tagwords:[]
}] ,
}
您还可以添加任何其他属性从您引用对象到结果,您希望,显示在您的Json对象:)
I have an MVC-3 (RC1) application using Entity Framework 4.
I wish to return a JSON object from a controller action. This object is referenced by other objects, which obviously return the reference.
I thus receive the following circular reference error:
NB: Application & ReferenceObject are obviously replacements for the actual namespace / object.
According to Stack Overflow: Circular reference exception when serializing LINQ to SQL classes, this can be overcome using JSON.Net; however I would like to avoid this and instead try to exclude the offending reference properties from the object being serialized.
What do I mean?
I want to do something like this:
IList<ReferenceObject> list = Repository.GetReferenceObjects();
return Json(list.**<method>**("ObjectsReferencingThis"));
where **<method>**
is some method that does the opposite to the ObjectQuery(Of T).Include
method and ObjectsReferencingThis
is the property that is causing the circular reference.
NB: I do not wish to remove these properties or create POCOs as this only affects the Json serialization.
Anyone able to help please?
:)
I had a similar problem when worked on one of my previous project.Here is what I ended up doing:
IList<Product> list = Repository.GetProducts();
var collection = products.Select(product => new
{
id = product.Id,
name = product.Name,
detailUrl = product.DetailUrl,
imageLargeUrl = product.ThumbNailUrl,
tagtitle = product.Name.ToUpper(),
tagheader = "Words our cherished patrons use to describe this product",
tagwords = from tag in product.Tags group tag by tag.Name into words select new { name = words.Key, weight = words.Count() }
});
var result = new {id = inquiry.Id, products = collection, };
return this.Jsonp(result);
Here is how the result Json would look like:
{
"id" : 2,
"products" : [{
"id" : "3605970008857",
"name" : "TITLE1",
"detailUrl" : "http://www.urlhere.com",
"tagwords" : [{
"name" : "roses",
"weight" : 1
},
{
"name" : "cotton",
"weight" : 1
},
{
"name" : "happy",
"weight" : 1
}]
},
{
"id" : "3605970019891",
"name" : "TITLE2",
"detailUrl" : "http://www.urlhere.com",
"tagwords" : []
}],
}
You can also add any other properties from you referenced objects to the result as you wish,to be shown in your Json object :)
这篇关于在序列化实体框架类时,如何避免循环引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!