Browse Source

small amendments to serialization

vpenades 2 years ago
parent
commit
8aa66d720d
2 changed files with 7 additions and 5 deletions
  1. 1 1
      src/Shared/_Extensions.cs
  2. 6 4
      src/SharpGLTF.Core/IO/JsonSerializable.cs

+ 1 - 1
src/Shared/_Extensions.cs

@@ -764,7 +764,7 @@ namespace SharpGLTF
             if (node is System.Text.Json.Nodes.JsonValue asValue) clone = asValue.Deserialize<System.Text.Json.Nodes.JsonValue>();
             if (node is System.Text.Json.Nodes.JsonArray asArray) clone = asArray.Deserialize<System.Text.Json.Nodes.JsonArray>();
             if (node is System.Text.Json.Nodes.JsonObject asObject) clone = asObject.Deserialize<System.Text.Json.Nodes.JsonObject>();
-            #pragma warning enable IL2026 // Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code
+            #pragma warning restore IL2026 // Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code
 
             if (clone == null) throw new NotImplementedException();
 

+ 6 - 4
src/SharpGLTF.Core/IO/JsonSerializable.cs

@@ -470,12 +470,10 @@ namespace SharpGLTF.IO
         private static bool _TryCastValue
             <
             #if !NETSTANDARD
-            [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)]
+            [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.NonPublicConstructors)]
             #endif
             T>(ref Utf8JsonReader reader, out Object value)
         {
-            var vtype = typeof(T);
-
             value = null;
 
             if (reader.TokenType == JSONTOKEN.EndArray) return false;
@@ -484,10 +482,14 @@ namespace SharpGLTF.IO
 
             if (reader.TokenType == JSONTOKEN.PropertyName) reader.Read();
 
-            // untangle nullable
+            // untangle nullable            
+
+            var vtype = typeof(T);
             var ntype = Nullable.GetUnderlyingType(vtype);
             if (ntype != null) vtype = ntype;
 
+            // known types
+
             if (vtype == typeof(String)) { value = reader.AsString(); return true; }
             if (vtype == typeof(Boolean)) { value = reader.AsBoolean(); return true; }