使用Servicestack.Text重构类型对象的属性

时间:2013-01-25 23:14:37

标签: c# json servicestack

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

1 个答案:

答案 0 :(得分:-1)

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

因为您使用的是object属性,所以没有类型信息,因此它会回退并查找此信息是否存在 __ type 属性,但ServiceStack永远不会发出__type信息ValueTypes因为它大大增加了有效载荷。

如果没有类型信息,序列化程序只会将值保留为一个对象的字符串。

我建议避免使用接口,后期绑定对象类型等bad idea to have on DTOs,但为此您可以创建一个检查字符串值并返回正确类型的实例的扩展方法关于内容,例如:

var dto = new WildCard { AnyObject = 1 };

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

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

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