用Newtonsoft Json.Net反序列化字符串化的(带引号的)嵌套对象

米切尔·科索里斯(Mitchell Kossoris)

用Jackson反序列化嵌套的字符串对象(带引号)相同的问题,只是针对C#和Newtonsoft Json.Net。问题是如何使用Json.Net反序列化JSON的嵌套字符串表示形式。REST端点的示例响应:

{
    "Id": "abcd1234",
    "Foo": "{\"field1\": "abc", \"field2\": \"def\"}"
}

C#模型:

public class Model {
    public Guid Id { get; set; }
    public Dictionary<string, string> Foo { get; set; }
}

只是调用JsonConvert.DeserializeObject<Model>(returnedJson)会出错,因为Foo的返回格式是字符串化JSON,也就是字符串。在我们的JSON响应中的其他字段也是如此,它们的模型中关联了不同的Dictionary类型(例如Dictionary <string,int>和Dictionary <string,DateTime>)。

最简单的方法是什么?是否需要自定义JsonConverter或是否有内置方法来处理它?

维杰耶

JsonConverter可能是处理此隐式转换的最简单方法。这是适合您情况的一种。

public class MyConverter: JsonConverter
{
  public override bool CanConvert(Type objectType)
  {
    return objectType == typeof(string);
  }

  public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
  {
    return JsonConvert.DeserializeObject(reader.Value as string, objectType);
  }

  public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  {
    throw new NotImplementedException();
  }
}

然后使用以下属性装饰该属性:

public class Model
{
  public string Id { get; set; }
  [JsonConverter(typeof(MyConverter))]
  public Dictionary<string, string> Foo { get; set; }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Newtonsoft.JSON用C#反序列化Json字符串

Json newtonsoft:从对象反序列化字符串数组

Json 反序列化 Vb 中的嵌套对象 (Newtonsoft)

Newtonsoft.Json-反序列化不带引号的大写布尔值

用newtonsoft json问题反序列化列表

用Newtonsoft.Json反序列化

用Newtonsoft.Json枚举反序列化

用newtonsoft反序列化json数组

在C#中使用Newtonsoft.JSON努力反序列化JSON字符串

json newtonsoft:反序列化包含字符串列表的对象

对Newtonsoft.Json反序列化进行基准测试:从流和字符串

将字符串转换为类型时出错-Newtonsoft JSON反序列化

用可能是字符串或整数的字段反序列化JSON对象的最佳实践是什么?

用Json.Net反序列化对象数组

使用 Newtonsoft.Json.JsonConvert.DeserializeObject VISUAL BASIC 将 json 字符串反序列化为可视化基本对象

Newtonsoft JSON不会反序列化我的json文件中的嵌套对象

Newtonsoft.Json使用php 7.0 json_encode数组字符串反序列化问题

使用 NewtonSoft 反序列化 JSon 子对象

如何通过NewtonSoft反序列化对象json列表?

当Newtonsoft可以是单个字符串或行话时,反序列化JSON属性

如何使用 Newtonsoft.Json 正确反序列化数组中的嵌套对象?

在C#中使用Newtonsoft对嵌套的JSON对象进行反序列化

用Newtonsoft解析Json字符串

使用Json.NET从Json字符串反序列化嵌套的DataSet

如何反序列化 Json Newtonsoft

Newtonsoft JSON反序列化

使用 NewtonSoft 反序列化 JSON

Newtonsoft json.net反序列化NullReferenceException

Newtonsoft JSON.NET反序列化错误