MVC3 JsonSerializer发现神秘的循环引用?

时间:2012-03-26 23:32:47

标签: c# asp.net-mvc-3 activerecord serialization universe

以前曾经问过这个问题,但不是这个问题。我读过的几乎所有回复都涉及被序列化的实体框架。我试图在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(no&lt; T&gt;)同时还允许所有类型可以为空。当我尝试序列化从TextbookActiveRecord.GetByISBN()创建的此对象的实例时,我得到循环引用错误。我的DBValue对象都不使用string,float,int或DateTime以外的类作为模板。

我已经尝试实现ISerializable接口并使用GetObjectData方法填充SerializationInfo对象,但是通过使用异常,我看到看起来该方法甚至没有被调用(在一开始就把一个抛出该方法什么都不做。)

有谁知道这个世界上有什么问题?它可能是静态方法还是受保护的构造函数?

即使知道如何找到给它循环引用的特定属性也会非常有帮助。

1 个答案:

答案 0 :(得分:0)

使用方法序列化类也让我头疼。在方法中使用linq是我的问题。

我通过删除方法并将它们作为扩展方法添加来解决这个问题,以便序列化的实际类只包含属性。