Сериализовать объект .net linq в json, исключение для datacontext

#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, доступ к которому осуществляется после удаления.’