public override T Read( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType != JsonTokenType.StartObject) { throw new JsonException(); } var newOptions = options.CopyWithoutConverters().Also(o => { foreach (var item in options.Converters.Filter(v => v.GetType() != this.GetType())) { o.Converters.Add(item); } }); while (reader.Read()) { if (reader.TokenType != JsonTokenType.PropertyName || reader.CurrentDepth != 1) { continue; } var propertyName = reader.GetString(); if (propertyName == "fields") { if (reader.Read()) { var json = JsonSerializer.Deserialize <T>(ref reader, newOptions); while (reader.Read()) { ; } return(json); } } else { continue; } } throw new JsonException(); }
public override void Write( Utf8JsonWriter writer, T value, JsonSerializerOptions options) { var newOptions = options.CopyWithoutConverters().Also(o => { foreach (var item in options.Converters.Filter(v => v.GetType() != this.GetType())) { o.Converters.Add(item); } }); writer.WriteStartObject(); writer.WritePropertyName("fields"); JsonSerializer.Serialize(writer, value, newOptions); writer.WriteEndObject(); }