Background and motivation
The JsonSerializer class exposes serialization and deserialization overloads that accept JsonTypeInfo<T>. These overloads are generally marked AOT/linker-safe and provide the only entrypoint for serializing using materialized metadata instances. We are however missing non-generic overloads for doing the same thing.
API Proposal
namespaceSystem.Text.Json;publicpartialstaticclassJsonSerializer{publicstaticobject?Deserialize(stringjson,JsonTypeInfojsonTypeInfo);publicstaticobject?Deserialize(ReadOnlySpan<byte>utf8Json,JsonTypeInfojsonTypeInfo);publicstaticobject?Deserialize(refUtf8JsonReaderreader,JsonTypeInfojsonTypeInfo);publicstaticobject?Deserialize(Streamutf8Json,JsonTypeInfojsonTypeInfo);publicstaticValueTask<object?>DeserializeAsync(Streamutf8Json,JsonTypeInfojsonTypeInfo,CancellationTokencancellationToken=default);publicstaticobject?Deserialize(JsonDocumentdocument,JsonTypeInfojsonTypeInfo);publicstaticobject?Deserialize(JsonElementelement,JsonTypeInfojsonTypeInfo);publicstaticobject?Deserialize(JsonNodenode,JsonTypeInfojsonTypeInfo);publicstaticstringSerialize(object?value,JsonTypeInfojsonTypeInfo);publicstaticbyte[]SerializeToUtf8Bytes(object?value,JsonTypeInfojsonTypeInfo);publicstaticvoidSerialize(Utf8JsonWriterwriter,object?value,JsonTypeInfojsonTypeInfo);publicstaticvoidSerialize(Streamutf8Json,object?value,JsonTypeInfojsonTypeInfo);publicstaticTaskSerializeAsync(Streamutf8Json,object?value,JsonTypeInfojsonTypeInfo,CancellationTokencancellationToken=default);publicstaticJsonDocumentSerializeToDocument(object?value,JsonTypeInfojsonTypeInfo);publicstaticJsonElementSerializeToElement(object?value,JsonTypeInfojsonTypeInfo);publicstaticJsonNodeSerializeToNode(object?value,JsonTypeInfojsonTypeInfo);}API Usage
The following example shows how we can perform non-generic serialization without invoking any of the RequiresUnreferencedCode APIs:
varoptions=newJsonSerializerOptions{TypeInfoResolver=JsonTypeInfoResolver.Combine(ContextA.Default,ContextB.Default)};JsonTypeInfotypeInfo=options.GetTypeInfo(typeof(SupportedPoco));object?result=JsonSerializer.Deserialize("{}",typeInfo);Console.WriteLine(resultisSupportedPoco);// TrueAlternative Designs
No response
Risks
No response
Background and motivation
The
JsonSerializerclass exposes serialization and deserialization overloads that acceptJsonTypeInfo<T>. These overloads are generally marked AOT/linker-safe and provide the only entrypoint for serializing using materialized metadata instances. We are however missing non-generic overloads for doing the same thing.API Proposal
API Usage
The following example shows how we can perform non-generic serialization without invoking any of the RequiresUnreferencedCode APIs:
Alternative Designs
No response
Risks
No response