序列化.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);

序列化.net linq对象到json,数据上下文异常

如果您的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库