2

我正在使用 Servicestack.Text 包对 JSON 对象进行序列化和反序列化。我的一个对象具有对象类型 (System.Object) 的属性。它是三件事之一:一个长的,一个双的,一个字符串。但是,当我使用 JsonSerializer.DeserializeFromString 时,它总是被反序列化为字符串。我需要将它反序列化为序列化时的类型。我尝试使用 JsConfig.IncludeTypeInfo = true; 包含类型信息 但是,这似乎只适用于类级别,而不适用于属性级别。我该如何进行这项工作?

4

1 回答 1

-1

这在ServiceStack JSON Serializer中不受支持,它查看它正在反序列化的目标类型以获取有关如何强制 JSON 值的信息。

因为您使用的是object属性,所以没有类型信息,因此它会回退并查找该信息是否存在__type属性,但 ServiceStack 从不发出 ValueTypes 的 __type 信息,因为它会大大膨胀有效负载。

在没有类型信息的情况下,序列化程序只是将值作为一个对象作为字符串保留。

我建议避免使用接口、后期绑定对象类型等,这在 DTO 上是个坏主意,但为此您可以创建一个扩展方法来检查字符串值并根据返回正确类型的实例内容,例如:

var dto = new WildCard { AnyObject = 1 };

dto.AnyObject.AsJsonValue(); //Extension method that

"1" -> int 1
"true" -> bool true
"anything else" -> string "anything else"

唯一的问题是无法发送包含数字或布尔值的字符串文字,因为它总是被强制转换为各自的类型。

于 2013-01-26T00:11:27.043 回答