JsonModelConverter
A generic converter which allows JsonSerializer to be able to write and read any models that implement IJsonModel<T>.
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace System.ClientModel.Primitives
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(new byte[] {
0,
1,
1
})]
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The constructors of the type being deserialized are dynamically accessed and may be trimmed.")]
public class JsonModelConverter : JsonConverter<IJsonModel<object>>
{
private ModelReaderWriterOptions _options { get; }
public JsonModelConverter()
: this(ModelReaderWriterOptions.Json)
{
}
public JsonModelConverter(ModelReaderWriterOptions options)
{
_options = options;
}
public override bool CanConvert(Type typeToConvert)
{
return !Attribute.IsDefined(typeToConvert, typeof(JsonConverterAttribute));
}
public override IJsonModel<object> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
IJsonModel<object> obj = ModelReaderWriter.GetObjectInstance(typeToConvert) as IJsonModel<object>;
if (obj == null)
throw new InvalidOperationException("Either " + typeToConvert.Name + " or the PersistableModelProxyAttribute defined needs to implement IJsonModel.");
return (IJsonModel<object>)obj.Create(ref reader, _options);
}
public override void Write(Utf8JsonWriter writer, IJsonModel<object> value, JsonSerializerOptions options)
{
value.Write(writer, _options);
}
}
}