From 7c9df3e16d46167ed7c6967f3940041777c9c7ed Mon Sep 17 00:00:00 2001 From: Emmanuel Counasse Date: Sun, 23 Feb 2020 17:35:04 +0100 Subject: [PATCH] Support for System.Text.Json in .NET Core 3 #85 don't rely on GetRawText --- NewApi/JsonSubtypes2.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/NewApi/JsonSubtypes2.cs b/NewApi/JsonSubtypes2.cs index 0fc8b7c..f3366c5 100644 --- a/NewApi/JsonSubtypes2.cs +++ b/NewApi/JsonSubtypes2.cs @@ -170,11 +170,18 @@ private static Type GetElementType(Type arrayOrGenericContainer) private T ReadObject(ref Utf8JsonReader reader, Type objectType, JsonSerializerOptions serializer) { + // Copy the current state from reader (it's a struct) + var readerAtStart = reader; + var jObject = JsonDocument.ParseValue(ref reader); - var targetType = GetType(jObject, objectType, serializer) ?? objectType; + var targetType = GetType(jObject, objectType, serializer); + if (targetType is null) + { + throw new JsonException($"Unable to resolve a subtype of {objectType.Name}"); + } - return (T)JsonSerializer.Deserialize(jObject.RootElement.GetRawText(), targetType); + return (T)JsonSerializer.Deserialize(ref readerAtStart, targetType, serializer); } Type IJsonSubtypes.GetType(JsonDocument jObject, Type parentType)