編集:私は、私は、標準のシリアル化(つまりなしカスタムコンバータ)用を使用したいが、直接のサブタイプをデシリアライズする際(スーパークラスに[JsonConverter(typeof(TConverter))]
を適用することで)基本型のためJsonConverterを上書きしているJsonConvert.DeserializeObjectを呼び出し、[JsonConverter]を介してベースタイプに適用されたJsonConverterを無効にする方法はありますか?
:質問を明確に私の派生オブジェクトをデシリアライズします。あたかもJsonConverterをオーバーライドしなかったかのように、deserializeメソッドで使用するSTANDARDシリアル化を指定するにはどうすればよいですか?
私は弾性検索を使用しており、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