与用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] 删除。
我来说两句