【发布时间】:2017-03-21 05:22:25
【问题描述】:
我有这段代码可以将Route 对象列表发送到我的视图(ASP.Net MVC):
public ActionResult getRouteFromPart(int partId)
{
List<Route> routes = _routeService.GetRouteByPartType(partId);
if (routes == null)
{
return this.AdvancedJsonResult(null, JsonRequestBehavior.AllowGet);
}
return this.AdvancedJsonResult(new
{
Routes = routes
}, JsonRequestBehavior.AllowGet);
}
但我在 AdvancedJsonResult 类中遇到了一个异常:
if (Data != null)
{
var settings = new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
string result = JsonConvert.SerializeObject(this.Data, this.Formatting, settings);
response.Write(result);
}
我已经尝试过“ReferenceLoopHanding.Ignore”技巧来使异常静音,但列表仍然没有传递给视图。
当我将routes 更改为单个对象而不是列表时,该代码有效,因此我认为该代码不喜欢使用列表。
我是这个项目的新手,所以我不知道如何解决这个问题并让它对使用 List 感到满意...
编辑:这是完整的异常消息,发生在string result = JsonConvert... 行。
检测到类型为“System.Data.Entity.DynamicProxies.PartNumber_B135A5D16403B760C3591872ED4C98A25643FD10B51246A690C2F2D977973452”的自引用循环。路径'routes[0].incomingLots[0].partNumber.partType.partNumbers'。
【问题讨论】:
-
问题在于
Route中的类型和数据。您显示的代码看起来不错。 -
顺便说一句,AdvancedJsonResult 似乎是一个方法,而不是一个类。检查您的 json 本身是否引用循环。特别是,第一条路线 -> 第一个传入Lots -> partNumber -> partType .. 可能有部分编号在循环中引用其他人
标签: c# asp.net json serialization json.net