【问题标题】:Deserialize a generic object in ServiceStack.Text反序列化 ServiceStack.Text 中的通用对象
【发布时间】:2018-03-19 16:28:22
【问题描述】:

我试图找到将匿名对象从 JSON 反序列化为类似于 ServiceStack.Text 中原始 JSON 结构的结构的解决方案,但我没有找到任何可接受的解决方案。虽然我知道反序列化程序不知道如何反序列化通用对象,但我准备向它指出一些规则,例如:

  • 对任何通用对象使用 Dictionary 或 ExpandoObject,以反序列化器最喜欢的为准
  • 对任何列表使用 List

我试图反序列化为 Dictionary,但条目都是字符串,无论我里面是否有复杂的对象,甚至是列表。下一个尝试是使用 ExpandoObject,它稍微好一点,将列表识别为 List,但里面的对象都是字符串。我假设对于上面指出的两个规则的场景,它应该是一个简单的配置问题,但我没有发现任何可能性。

有没有人知道解决这个难题的线索?提前致谢。

【问题讨论】:

    标签: servicestack-text


    【解决方案1】:

    似乎以下设置可以解决问题:

    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 框架 (https://github.com/quartz-software/kephas/blob/master/src/Kephas.Serialization.ServiceStack.Text/JsonExpando.cs) 中的 JsonExpando 类。重要提示:在JsonConfig 中使用上述设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      相关资源
      最近更新 更多