我想将我的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);
答案 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库。