【发布时间】:2014-06-03 03:49:42
【问题描述】:
所以我过去曾用 JSON 序列化处理循环引用异常,我觉得我吸取了痛苦的教训,但出现了一个新问题,让我怀疑我是否真正理解了我必须解决的问题再次面对。
据我了解,循环引用异常(就 JSON 序列化而言)是子对象引用其父对象或任何对象引用自身时。这是一个可以理解的例外,删除这些“循环引用”将缓解该问题。
我的问题是我收到了一个似乎不可能的循环引用异常。我目前正在从 XML 文件中读取其元素列表,然后将结果序列化并将其传递给 MVC 视图。
方法如下:
public JsonResult GetMakeModelData()
{
var path = Server.MapPath("/App_Data/XML/Make_Model_List.xml");
var doc = XDocument.Load(path);
var Makes = doc.Root.Elements().Select(x => x.Element("carname")).ToList();
var jsonResult = Json(Makes, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
}
...和 XML 示例:
<carlist>
<car>
<carname>AC</carname>
<carmodellist>
<carmodel>Cobra</carmodel>
</carmodellist>
</car>
<car>
<carname>Acura</carname>
<carmodellist>
<carmodel>1.6 EL</carmodel>
<carmodel>1.7 EL</carmodel>
<carmodel>2.2 CL</carmodel>
<carmodel>2.3 CL</carmodel>
<carmodel>2.5 TL</carmodel>
<carmodel>3.0 CL</carmodel>
<carmodel>3.2 CL</carmodel>
<carmodel>3.2 TL</carmodel>
<carmodel>3.5 RL</carmodel>
<carmodel>CL</carmodel>
<carmodel>CSX</carmodel>
<carmodel>EL</carmodel>
<carmodel>Integra</carmodel>
<carmodel>Legend</carmodel>
<carmodel>MDX</carmodel>
<carmodel>NSX</carmodel>
<carmodel>NSX-T</carmodel>
<carmodel>RDX</carmodel>
<carmodel>RL</carmodel>
<carmodel>RSX</carmodel>
<carmodel>SLX</carmodel>
<carmodel>TL</carmodel>
<carmodel>TSX</carmodel>
<carmodel>Vigor</carmodel>
</carmodellist>
</car>
....
</carlist>
现在,正如您所料,我得到了 LINQ 查询返回的 97 个元素的列表。当传递给视图时,我得到一个循环引用异常......在一个对象上,它只包含 97 个唯一字符串。异常来自哪里,为什么会发生?!
【问题讨论】:
-
当引用完全是圆形时。
-
@Servy 我承认这让我很开心。
-
@Servy 你的评论没有帮助
-
是时候进行建设性的了。我会在 Linq 查询之后设置一个断点并深入研究 Makes 中返回的内容。也许你没有得到你所期望的。
标签: c# xml linq serialization