我试图找到一个解决方案,用于将匿名对象从JSON反序列化为类似ServiceStack.Text中原始JSON结构的结构,但我找不到任何可接受的解决方案。虽然我确实知道反序列化器没有关于如何反序列化通用对象的线索,但我已经准备好指出一些规则,如:
我尝试反序列化为Dictionary< string,object>,但条目都是字符串,无论我是否有复杂的对象,甚至是列表。接下来的尝试是使用ExpandoObject,这稍微好一些,将列表识别为List< object>,但里面的对象都是字符串。我假设对于具有上述两个规则的场景,它应该是一个简单的配置问题,但我没有发现任何可能性。
有没有人有解决这个难题的线索?提前谢谢。
答案 0 :(得分:0)
似乎以下设置可以解决问题:
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
类,但实现不会保留JSON中的原始名称。
对于替代实现,请检查Kephas Framework中的JsonExpando类(https://github.com/quartz-software/kephas/blob/master/src/Kephas.Serialization.ServiceStack.Text/JsonExpando.cs)。重要提示:请使用JsonConfig
中的上述设置。