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