编辑:澄清问题:如何通过[JsonConverter]调用JsonConvert.DeserializeObject并禁用应用于基本类型的JsonConverter?
我已经覆盖了JsonConverter为基本类型(应用[JsonConverter(typeof(TConverter))]
超类),而是直接反序列化分型时,我想使用标准序列(即没有自定义转换器),用于反序列化我的派生对象。如何在反序列化方法中指定STANDARD序列化,就像我没有重写JsonConverter一样?
我正在使用弹性搜索,并且无法使用JsonConverter的自定义实现调用JsonConvert.DeserializeObject,并且必须依赖Elastic的属性来使用我的转换器。
但是,使用此转换器作为属性似乎也会影响所有子类,但我只是希望他们使用标准转换器,这样我就不必为许多实现中的每一个实现JsonConverter。
这是我的课/逻辑,因为我想它看起来:
[Route("test")]
[HttpPost]
public HttpResponseMessage Test([FromBody] JToken json)
{
var res = json.ToObject<Product>(); // I want an object of ProductImpl type here
return Request.CreateResponse(res);
}
[JsonConverter(typeof(JsonProductConverted))]
public abstract class Product
{
}
public class ProductImpl : Product
{
}
public class JsonProductConverted : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject json = JObject.Load(reader);
//var type = GetTypeFromId((int) json["typeId"]); // Construct type from field in
var type = typeof(ProductImpl);
// var res = JsonConvert.DeserializeObject(json.ToString(), type, DEFAULT_JSONCONVERTER_HERE);
var res = DeserializeToObjectWithStandardJsonConverter(json, type);
return res;
}
public override bool CanConvert(Type objectType)
{
return false;
}
}
如果我不提供默认JsonConverter,或类似它只会使用JsonProductConverted转换器,它创建了一个无限循环。
请尝试制定一个明确的问题,很难得到你所要求的。 – Mafii