fix: yaml type containers are not being recognized while reading back
This commit is contained in:
@@ -37,17 +37,25 @@ public class SerializedClassConverter : EngineTypeYamlConverterBase<SerializedCl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach ((string key, object @object) in publicDictionary)
|
||||||
|
if (@object is IDictionary<object, object> dictionary && dictionary.TryGetValue(nameof(TypeContainer.Type), out object? typeField) && dictionary.TryGetValue(nameof(TypeContainer.Value), out object? valueField))
|
||||||
|
publicDictionary[key] = new TypeContainer() { Type = typeField!.ToString()!, Value = valueField };
|
||||||
|
|
||||||
|
foreach ((string key, object @object) in privateDictionary)
|
||||||
|
if (@object is IDictionary<object, object> dictionary && dictionary.TryGetValue(nameof(TypeContainer.Type), out object? typeField) && dictionary.TryGetValue(nameof(TypeContainer.Value), out object? valueField))
|
||||||
|
privateDictionary[key] = new TypeContainer() { Type = typeField!.ToString()!, Value = valueField };
|
||||||
|
|
||||||
Type classType = TypeFactory.GetType(serializedClass.Type);
|
Type classType = TypeFactory.GetType(serializedClass.Type);
|
||||||
|
|
||||||
foreach ((string key, object @object) in publicDictionary)
|
foreach ((string key, object @object) in publicDictionary)
|
||||||
if (@object is TypeContainer typeContainer)
|
if (@object is TypeContainer typeContainer)
|
||||||
serializedClass.Public.Add(key, Serializer.InternalDeserialize(typeContainer.Value!.ToString()!, TypeFactory.GetType(typeContainer.Type)));
|
serializedClass.Public.Add(key, Serializer.InternalDeserialize(Serializer.Serialize(typeContainer.Value!), TypeFactory.GetType(typeContainer.Type)));
|
||||||
else
|
else
|
||||||
serializedClass.Public.Add(key, Serializer.InternalDeserialize(@object.ToString()!, (classType.GetProperty(key, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)?.PropertyType ?? classType.GetField(key, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)?.FieldType)!));
|
serializedClass.Public.Add(key, Serializer.InternalDeserialize(@object.ToString()!, (classType.GetProperty(key, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)?.PropertyType ?? classType.GetField(key, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)?.FieldType)!));
|
||||||
|
|
||||||
foreach ((string key, object @object) in privateDictionary)
|
foreach ((string key, object @object) in privateDictionary)
|
||||||
if (@object is TypeContainer typeContainer)
|
if (@object is TypeContainer typeContainer)
|
||||||
serializedClass.Private.Add(key, Serializer.InternalDeserialize(typeContainer.Value!.ToString()!, TypeFactory.GetType(typeContainer.Type)));
|
serializedClass.Private.Add(key, Serializer.InternalDeserialize(Serializer.Serialize(typeContainer.Value!), TypeFactory.GetType(typeContainer.Type)));
|
||||||
else
|
else
|
||||||
serializedClass.Private.Add(key, Serializer.InternalDeserialize(@object.ToString()!, (classType.GetProperty(key, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Default)?.PropertyType ?? classType.GetField(key, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Default)?.FieldType)!));
|
serializedClass.Private.Add(key, Serializer.InternalDeserialize(@object.ToString()!, (classType.GetProperty(key, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Default)?.PropertyType ?? classType.GetField(key, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Default)?.FieldType)!));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user