以前有人问过这个问题,但不是关于这个具体问题。我读过的几乎所有回复都涉及被序列化的实体框架。我正在尝试按照 ActiveRecord 模式序列化一个对象,该模式包含来自多值数据库(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(无 <T>)同时还允许所有类型可为空,我可以将每个值视为泛型。当我尝试序列化从 TextbookActiveRecord.GetByISBN() 创建的此对象的实例时,我收到循环引用错误。我的 DBValue 对象都没有使用除 string、float、int 或 DateTime 之外的类作为它们的模板。
我已经尝试实现 ISerializable 接口并使用 GetObjectData 方法来填充 SerializationInfo 对象,但是通过使用异常我看到它看起来甚至没有被调用(在方法的开头放置一个 throw什么都不做)。
有谁知道这到底有什么问题?可能是静态方法还是受保护的构造函数?
即使知道如何找到为其提供循环引用的特定属性也会非常有帮助。