反序列化 ServiceStack.Text 中的通用对象
Deserialize a generic object in ServiceStack.Text
我试图找到一种解决方案,将匿名对象从 JSON 反序列化为类似于 ServiceStack.Text 中原始 JSON 结构的结构,但我没有找到任何可接受的解决方案。虽然我知道反序列化器不知道如何反序列化通用对象,但我准备向它指示一些规则,例如:
- 对任何通用对象使用 Dictionary
或 ExpandoObject,以反序列化器最喜欢的为准
- 对任何列表使用 List
我试图反序列化为 Dictionary,但条目都是字符串,无论我是否有复杂的对象,甚至列表。下一次尝试使用 ExpandoObject,它稍微好一点,将列表识别为 List
有人知道解决这个难题的线索吗?提前致谢。
似乎以下设置可以解决问题:
JsConfig.ConvertObjectTypesIntoStringDictionary = true;
JsConfig.TryToParsePrimitiveTypeValues = false; // otherwise, for untyped jsons, any string value which can't be converted to primitive types will return null.
var dictionary = ServiceStack.Text.JsonSerializer.DeserializeFromString(json, typeof(object));
另一种选择是 ServiceStack.Text 提供的 DynamicJson
class,但实现不保留 JSON.
中的原始名称
对于替代实现,请查看 Kephas Framework (https://github.com/quartz-software/kephas/blob/master/src/Kephas.Serialization.ServiceStack.Text/JsonExpando.cs) 中的 JsonExpando class。重要提示:在 JsonConfig
.
中使用上述设置
我试图找到一种解决方案,将匿名对象从 JSON 反序列化为类似于 ServiceStack.Text 中原始 JSON 结构的结构,但我没有找到任何可接受的解决方案。虽然我知道反序列化器不知道如何反序列化通用对象,但我准备向它指示一些规则,例如:
- 对任何通用对象使用 Dictionary
或 ExpandoObject,以反序列化器最喜欢的为准 - 对任何列表使用 List
我试图反序列化为 Dictionary
有人知道解决这个难题的线索吗?提前致谢。
似乎以下设置可以解决问题:
JsConfig.ConvertObjectTypesIntoStringDictionary = true;
JsConfig.TryToParsePrimitiveTypeValues = false; // otherwise, for untyped jsons, any string value which can't be converted to primitive types will return null.
var dictionary = ServiceStack.Text.JsonSerializer.DeserializeFromString(json, typeof(object));
另一种选择是 ServiceStack.Text 提供的 DynamicJson
class,但实现不保留 JSON.
对于替代实现,请查看 Kephas Framework (https://github.com/quartz-software/kephas/blob/master/src/Kephas.Serialization.ServiceStack.Text/JsonExpando.cs) 中的 JsonExpando class。重要提示:在 JsonConfig
.