MVC3 JsonSerializer находит загадочные круговые ссылки? - PullRequest
0 голосов
/ 27 марта 2012

Об этом уже спрашивали, но не об этой конкретной проблеме.Почти все ответы, которые я прочитал, имеют дело с сериализованной структурой сущностей.Я пытаюсь сериализовать объект по шаблону 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, но с помощьюисключения, которые я видел, похоже, что этот метод даже не вызывается (установка броска в начале метода вообще ничего не делает).

Кто-нибудь знает, что в мире не так с этим?Может быть это статические методы или защищенный конструктор?

Даже знание того, как я могу найти конкретное свойство, которое дает ему циклическую ссылку, было бы действительно полезным.

1 Ответ

0 голосов
/ 27 марта 2012

Сериализация класса с помощью методов также доставляет мне головную боль.Использование linq в методах было моей проблемой.

Я справился с этим, удалив методы и добавив их в качестве методов расширения, чтобы фактический сериализованный класс состоял только из свойств.

...