所以我有一个我点击的 API,以便在数据库中获取有关动物的详细信息
这些动物有 ID,所以我的网络请求看起来像这样/animal/1234
API 的响应如下所示:
{
"name": "Tony",
"type": "Tiger",
"stripeCount": 14
}
或者替代地
{
"name": "Kermit",
"type": "Frog",
"slimy": true
}
当我查询 API 时,我不知道type我会返回什么动物,但在某些情况下,我想将它们反序列化为适合它们的类type
这是我目前正在使用的类,包括JsonConverter我正在尝试使用的属性:
[JsonConverter(typeof(AnimalJsonConverter))]
class Animal {
public string name { get; set; }
public string type { get; set; }
}
class Tiger : Animal {
public int stripeCount { get; set; }
}
我已经设置了一个JsonConverter<Animal>实现方法的方法ReadJson,如下所示:
public override Animal ReadJson(JsonReader reader, Type objectType, Post existingValue, bool hasExistingValue, JsonSerializer serializer) {
var animalObj = JObject.Load(reader);
var type = (string)animalObj["type"];
switch(type) {
case "Tiger":
return animalObj.ToObject<Tiger>();
default:
return animalObj.ToObject<Animal>();
}
}
然而,这会导致问题,因为该语句animalObj.ToObject<Tiger>();尊重JsonConverteronAnimal并尝试ReadJson再次调用我的方法,从而导致递归地狱
如果有人能看到这个问题的解决方案,我将不胜感激
largeQ
相关分类