#c# #.net #serialization
#c# #.net #сериализация
Вопрос:
Я хотел бы сериализовать свой объект 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);
Комментарии:
1. Вы должны использовать отдельные ViewModels.
Ответ №1:
Если ваш сгенерированный 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
Если вы отключите отложенную загрузку и попытаетесь выполнить сериализацию, он не будет пытаться отложить загрузку связанных объектов.
Надеюсь, это сработает.
Мустафа
Ответ №2:
DataContractSerializer для XML и DataContractJsonSerializer для JSON. Вы также можете попробовать библиотеку NewtonSoft JSON.
Комментарии:
1. Сбой как DataContractJsonSerializer, так и библиотеки NewtonSoft JSON. Возвращаемый результат — System . Исключение ObjectDisposedException: не удается получить доступ к удаленному объекту. Имя объекта: ‘DataContext, доступ к которому осуществляется после удаления.’