Это было задано раньше, но не об этой конкретной проблеме. Почти все ответы, которые я прочитал, касаются структуры сериализации сущности. Я пытаюсь сериализовать объект, следуя шаблону ActiveRecord, который содержит некоторую информацию из базы данных MultiValue (UniVerse), и хотя я думал, что структура моих классов хранения данных была очень простой, JsonSerializer настаивает на поиске циркулярных ссылок, и я не могу на всю жизнь я выясню, где находится круговая ссылка.MVC3 JsonSerializer находит загадочные круговые ссылки?
Мой объект имеет такую структуру к нему:
/// <summary>
/// Textbook Active Record
/// </summary>
public class TextbookActiveRecord
{
public DBValue<string> ISBN { get; private set; }
public DBValue<string> Synonym { get; private set; }
public DBValue<DateTime> LastUpdate { get; private set; }
public DBValue<string> Author { get; private set; }
public DBValue<string> Title { get; private set; }
//....up to 70 more properties for some of my tables....
protected TextbookActiveRecord() { }
public static TextbookActiveRecord GetByISBN(string isbn)
{
//....Creates a new object and fills in the values above...
}
}
Класс DBValue просто класс-оболочка, которая позволяет мне рассматривать каждое значение, как если бы оно было общим, если мне нужно на понижающее приведение к DBValue (no <T>), а также допускает, чтобы все типы имели значение NULL. Когда я пытаюсь выполнить сериализацию экземпляра этого объекта, созданного из TextbookActiveRecord.GetByISBN(), я получаю круговую ошибку ссылки. Ни один из моих объектов DBValue не использует в качестве шаблона классы, отличные от string, float, int или DateTime.
Я попытался реализовать интерфейс ISerializable и использовать метод GetObjectData для заполнения объекта SerializationInfo, но с помощью исключений я видел, что похоже, что этот метод даже не вызван (помещая бросок прямо на начало метода ничего не делает).
Кто-нибудь знает, что в этом мире не так? Могут ли быть статические методы или, возможно, защищенный конструктор?
Даже зная, как я могу найти конкретное свойство, которое дает ему круговую ссылку, было бы действительно полезно.