編輯:澄清問題:如何通過[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