gpt4 book ai didi

c# - ServiceStack.OrmLite : Again, 序列化失败,从 blobbed 字段读回时 bool 变为字符串

转载 作者:行者123 更新时间:2023-11-29 02:11:22 31 4
gpt4 key购买 nike

在关于 ServiceStack OrmLite 之前,我已经问过有关序列化和反序列化的问题,我不确定这是否与我之前遇到的问题相同,但我不这么认为。

基本上,我有一个 public Dictionary<string, object> _CustomProperties我在哪里存储一些随机数据。

我像这样向这个字典中添加随机数据:

ms._SetCustomProperty<bool>("ConvertedContactItems", true);

像这样:

enter image description here

这是使用 OrmLite 的 Blob ,像这样:

enter image description here

当我读回它时(使用 Untyped API),我会执行以下操作:

bool hasConvertedContactItems = actor._GetCustomProperty<bool>("ConvertedContactItems");

但是 bool 值 true现在是一个字符串,而不是一个 bool 值:

enter image description here

问题是:我做错了什么?我有一种轻微的感觉,这可能是一个听起来和以前一样的答案,但我不太确定。

更新 1

下面是一个Dictionary<string, object>在 OrmLite 中使用 JsvSerializer 序列化。我认为既然它不能正确地反序列化一个 bool 值,它肯定不能反序列化一个自定义对象。好吧,自定义对象似乎有时会包含类型信息。 CustomerSettings得到正确的反序列化,但 bool、datetime 等没有。

那么,如果为自定义对象添加类型信息,为什么不为原始对象添加类型信息,以便我们可以正确反序列化它们? (太臃肿?那为什么要自定义对象?)

{
MyBoolProp:True, // <-- why not emit type info, like CustomerSettings below?
MyDateTime:2018-08-01T22:49:58.7586897+02:00, // <-- why not emit type info
Settings:
{
__type:"Commons.CustomerSettings,Commons",
NotifStarted:False,
NotifFinished:True
}
}

最佳答案

序列化输出不包含任何类型信息,因此如果您尝试将其反序列化为 object它不知道要反序列化成什么类型​​,所以它保留为 string。这也是一个对象。

我建议避免使用 object相反,如果你想序列化无类型的键/值对来序列化一个 Dictionary<string,string>这样,值始终作为字符串存储和检索。

当然,如果您需要序列化类型化的字典,例如 Dictionary<string,bool>那么你应该改用它。

关于c# - ServiceStack.OrmLite : Again, 序列化失败,从 blobbed 字段读回时 bool 变为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51607455/

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