gpt4 book ai didi

c# - Sterling Db 不使用自定义序列化

转载 作者:行者123 更新时间:2023-11-30 21:13:16 24 4
gpt4 key购买 nike

我在 WP7 应用程序中使用 Sterling DB,并尝试实现自定义序列化程序,希望能提高性能。

我将提供一个例子(请原谅所有的格式,试图压缩它以保持它的小)。给定一个继承 List<string>: 的类型

public class TypedList : List<string>
{
public Guid ObjectId { get; set; }

public TypedList() { }
public TypedList(int count) : base(count) { }
}

它是序列化器:

public class TypedListSerializer : Wintellect.Sterling.Serialization.BaseSerializer
{
public override bool CanSerialize(Type targetType)
{
return targetType.Equals(typeof(TypedList));
}

public override object Deserialize(Type type, BinaryReader reader)
{
int count = reader.ReadInt32();
var list = new TypedList(count);

for (int i = 0; i < count; i++)
list.Add(reader.ReadString());

return list;
}

public override void Serialize(object target, BinaryWriter writer)
{
var list = (TypedList)target;
writer.Write(list.Count);

foreach (string s in list)
writer.Write(s);
}
}

我向引擎注册序列化程序:

_engine = new SterlingEngine();
_engine.SterlingDatabase.RegisterSerializer<TypedListSerializer>();
_engine.Activate();

假设一个表 TypedList类型。现在,当我尝试在 Sterling 实例上保存/加载此类型时:

// _instance is a class that inherits BaseDatabaseInstance from the Sterling code.
_instance.Save<TypedList>(list);
_instance.Flush();
_instance.Load<TypedList>(g); // g is Guid.

它调用CanSerialize ,但是 Type给出的是T来自 List<T> ,我继承的类。如果你改变 stringint ,它告诉我类型是 int .

还有其他人遇到过这个问题吗?这是 Sterling 问题还是具有泛型类型信息的问题?

更新:根据 Marc 关于继承的建议,我将我的类型修改为以下内容:

public class TypedList
{
public Guid ObjectId { get; set; }
public List<int> Items { get; set; }

public TypedList()
{
Items = new List<int>();
}
}

序列化程序似乎在检查 of 的属性 TypedList而不是类型本身。我猜现在这是我使用 Sterling 的错误。我的表格注册行如下所示:

protected override List<ITableDefinition> RegisterTables()
{
return new List<ITableDefinition>
{
CreateTableDefinition<TypedList, Guid>(l => l.ObjectId)
};
}

最佳答案

物有所值 - Sterling 期望完全控制“顶级”实体,以便它可以构建键、索引和它需要运行的其他部分。这就是为什么它从不为顶级实体(您定义为具有索引和键的实体)调用自定义序列化程序的原因。自定义序列化程序适用于这些表的属性。上面的修复是正确的,因为它现在将列表视为一个属性,而不是它试图序列化的顶级“项目”。

关于c# - Sterling Db 不使用自定义序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com