什么是循环引用
本文关键字:引用 循环 什么 | 更新日期: 2023-09-27 17:59:00
因此,我在过去处理过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个唯一字符串。异常从哪里来,为什么会发生?!
您的问题可能是试图将List<XElement>
转换为json,而不是List<string>
。每个XElement
都有一个对其父元素的引用,而父元素又有一个对子元素的引用。
试试这个,看看它是否有帮助:
x.Element("carname").Value //get the string value instead of the XElement itself