序列化.net linq对象到json,数据上下文异常
本文关键字:数据 上下文 异常 json net linq 对象 序列化 | 更新日期: 2023-09-27 18:12:01
我想序列化我的linq对象json。linq对象已断开连接,这意味着数据上下文很久以前就被处理了。有一些在对象加载过程中没有加载的"相关"对象不能被访问(当被访问时,运行时错误返回"Cannot access a dispose object."因为数据上下文已经消失)
是否有任何json/xml转换器序列化此对象的能力?我不想改变dbml
是否有任何序列化对象具有配置忽略异常属性的能力?要重现这个问题,创建这个对象:
public class HelpMeToSerialize
{
public string Name;
public int Age
{
get
{
throw new Exception("Can't access this on runtime");
}
set
{
}
}
}
然后用下面的代码或者其他代码序列化它:
HelpMeToSerialize obj = new HelpMeToSerialize();
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(obj.GetType());
x.Serialize(Console.Out, obj);
如果您的Linq生成的对象与另一个表有关系,并且在创建对象时没有加载该表(例如通过Linq2Sql),那么您可以执行以下操作来序列化它:
//assume that your linq created object with class type StronglyTypedLinqObject has a field, ID, and a relationship called RelatedThing
StronglyTypedLinqObject row_from_db = null;
using(var myDatabase = new MyLinqContext(ConnectionString))
{
myDatabase.DeferredLoadingEnabled = false;
//assume this pulls one item back which has a relationship
row_from_db = (from o in myDatabase.TheTableToSelectFrom select o).Single();
row_from_db.RelatedThing = null; //this line may be unnecessary
} // context is disposed now
return Json(row_from_db); //this call should succeed
如果你禁用延迟加载并尝试序列化,那么它不会尝试延迟加载相关对象。
希望这有用。
穆斯塔法
XML的DataContractSerializer和JSON的DataContractJsonSerializer。你也可以试试NewtonSoft JSON库