Об этом уже спрашивали, но не об этой конкретной проблеме.Почти все ответы, которые я прочитал, имеют дело с сериализованной структурой сущностей.Я пытаюсь сериализовать объект по шаблону ActiveRecord, который содержит некоторую информацию из базы данных MultiValue (UniVerse), и хотя я думал, что структура моих классов хранения данных была очень простой, 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 (нет ), а также позволяющего обнулять все типы.Когда я пытаюсь сериализовать экземпляр этого объекта, созданный из TextbookActiveRecord.GetByISBN (), я получаю ошибку циклической ссылки.Ни один из моих объектов DBValue не использует классы, кроме string, float, int или DateTime, в качестве своих шаблонов.
Я пытался реализовать интерфейс ISerializable и использовать метод GetObjectData для заполнения объекта SerializationInfo, но с помощьюисключения, которые я видел, похоже, что этот метод даже не вызывается (установка броска в начале метода вообще ничего не делает).
Кто-нибудь знает, что в мире не так с этим?Может быть это статические методы или защищенный конструктор?
Даже знание того, как я могу найти конкретное свойство, которое дает ему циклическую ссылку, было бы действительно полезным.