0

以前有人问过这个问题,但不是关于这个具体问题。我读过的几乎所有回复都涉及被序列化的实体框架。我正在尝试按照 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什么都不做)。

有谁知道这到底有什么问题?可能是静态方法还是受保护的构造函数?

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

4

1 回答 1

0

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

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

于 2012-03-27T04:12:59.437 回答