问: 在.Net项目中工作时,使用JavaScriptSerializer序列化DataTable对象时遇到异常。我得到的异常是“序列化类型为'System.Reflection.RuntimeModule'的对象时检测到循环引用”。
我写的代码如下:
公共字符串SetData()
{
DataTable dt = new DataTable();
dt.Columns.Add(“ id”);
dt.Columns.Add(“ Name”);
dt.Rows.Add(“ 1”,“ Manish”);
dt.Rows.Add(“ 2”,“ Ajay”);
dt.Rows.Add(“ 3”,“ Ravi”);
dt.Rows.Add(“ 4”,“ Rahul”);
JavaScriptSerializer serial =新的JavaScriptSerializer();
字符串x = serial.Serialize(dt);
返回x;
}
在下面的图片将给予明确的想法此异常:
如果有人知道为什么我会收到此循环引用例外,并且该如何解决?
答:循环引用如下:
-root> child> parent> child> root ...
因为完成序列化后(在XML或json中),序列化后的数据遵循node(XML)或键值(json) ) 结构体。如果您的对象(要序列化)的结构不正确,则可能导致循环引用。
现在,您所遇到的问题的答案是通过使用以下代码来告诉编译器避免该问题
JsonConvert.SerializeObject(myObject,Formatting.Indented,
新的JsonSerializerSettings {
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
})
该代码仅告诉编译器忽略上述循环引用循环,而继续进行实际工作,即提供的对象的序列化。