序列化.net linq对象到json,datacontext上的异常

时间:2011-10-23 13:53:59

标签: c# .net serialization

我想将我的linq对象序列化为json。 linq对象已断开连接,这意味着datacontext很久以前就被丢弃了。 在对象加载过程中没有加载的“相关”对象无法访问(访问时,运行时错误返回“无法访问已处置的对象。”因为datacontext已消失)

是否有能够序列化此对象的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);

2 个答案:

答案 0 :(得分:3)

如果你的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

如果禁用延迟加载并尝试序列化,则不会尝试延迟加载相关对象。

希望有效。
穆斯塔法

答案 1 :(得分:0)

用于XML的DataContractSerializer和用于JSON的DataContractJsonSerializer。您也可以尝试使用NewtonSoft JSON库。