From 49b433f6b953465ffa436f8589f406f6034384c7 Mon Sep 17 00:00:00 2001 From: hybridherbst Date: Sat, 6 Jan 2024 14:46:05 +0100 Subject: [PATCH] fix missing extras property deserialization in MeshPrimitive deserializer fixes https://github.com/prefrontalcortex/UnityGLTF/issues/126 properly --- .../GLTFSerialization/Schema/MeshPrimitive.cs | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/Runtime/Plugins/GLTFSerialization/Schema/MeshPrimitive.cs b/Runtime/Plugins/GLTFSerialization/Schema/MeshPrimitive.cs index a9d18f867..aa48e4aa4 100644 --- a/Runtime/Plugins/GLTFSerialization/Schema/MeshPrimitive.cs +++ b/Runtime/Plugins/GLTFSerialization/Schema/MeshPrimitive.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; +using System.Linq; using GLTF.Extensions; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace GLTF.Schema { @@ -148,29 +150,18 @@ public static MeshPrimitive Deserialize(GLTFRoot root, JsonReader reader) skipStartObjectRead: true); }); break; - case "extras": - // GLTF does not support morph target names, serialize in extras for now + default: + primitive.DefaultPropertyDeserializer(root, reader); + + // GLTF does not support morph target names, serialize/deserialize in extras // https://github.com/KhronosGroup/glTF/issues/1036 - if (reader.Read() && reader.TokenType == JsonToken.StartObject) + if (curProp == "extras" && primitive.Extras != null) { - while (reader.Read() && reader.TokenType == JsonToken.PropertyName) + if (primitive.Extras is JObject extras && extras.TryGetValue("targetNames", out var targetNames) && targetNames is JArray) { - var extraProperty = reader.Value.ToString(); - switch (extraProperty) - { - case "targetNames": - primitive.TargetNames = reader.ReadStringList(); - break; - default: - primitive.DefaultPropertyDeserializer(root, reader); - break; - } + primitive.TargetNames = targetNames.Values().ToList(); } } - - break; - default: - primitive.DefaultPropertyDeserializer(root, reader); break; } }