MVC3 JsonSerializer发现神秘的循环引用
本文关键字:循环 引用 JsonSerializer 发现 MVC3 | 更新日期: 2023-09-27 18:29:08
以前有人问过这个问题,但不是关于这个特定的问题。我读到的几乎所有回复都涉及正在序列化的实体框架。我正试图按照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<T>),同时允许所有类型都可以为null。当我试图序列化从TextoolActiveRecord.GetByISBN()创建的这个对象的实例时,我得到了循环引用错误。我的DBValue对象都不使用string、float、int或DateTime以外的类作为模板。
我尝试过实现ISerializable接口,并使用GetObjectData方法来填充SerializationInfo对象,但通过使用异常,我发现该方法看起来甚至没有被调用(在方法的开头放一个throw完全没有作用)。
有人知道这到底是怎么回事吗?它可能是静态方法,也可能是受保护的构造函数?
即使知道如何找到赋予它循环引用的特定属性,也会非常有帮助。
我通过删除方法并将它们添加为扩展方法来解决这个问题,这样序列化的实际类只包含属性。