servicestack.ormlite:同样,序列化失败,当从blobbed字段读回bool时,它会变成一个字符串

jrcvhitl  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(363)

在谈到servicestack或mlite之前,我曾经问过关于序列化和反序列化的问题,我不确定这是否与我以前遇到的问题相同,但我不这么认为。
基本上,我有一个 public Dictionary<string, object> _CustomProperties 我在那里存储一些随机数据。
我将随机数据添加到字典中,如下所示:

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

像这样:

这是用ormlite填充的,像这样:

当我读回它(使用非类型化api)时,我执行以下操作:

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

但是布尔值 true 现在是字符串,而不是布尔值:

问题是:我做错了什么?我有一点感觉这可能是一个听起来和以前一样的答案,但我不太确定。
更新1
下面是一个 Dictionary<string, object> 在ormlite中使用jsvserializer序列化。我认为,由于它不能正确地反序列化布尔值,它肯定不能反序列化自定义对象。好吧,看起来自定义对象有时会有类型信息。这个 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
    }
}
kx5bkwkv

kx5bkwkv1#

序列化输出不包含任何类型信息,因此如果尝试将其反序列化为 object 它不知道反序列化为什么类型,所以它将其作为 string 这也是一个物体。
我建议不要使用 object 如果要序列化非类型化的键/值对,则 Dictionary<string,string> 这样,值总是以字符串的形式存储和检索。
当然,如果你需要序列化一个类型化的字典,比如 Dictionary<string,bool> 那你应该用它来代替。

相关问题