2012-03-26 2 views
0

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

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

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

ответ

0

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

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

Смежные вопросы