1616using System . Reflection ;
1717using Newtonsoft . Json ;
1818using Newtonsoft . Json . Linq ;
19- using Sirenix . Serialization ;
2019using UnityEditor ;
2120using UnityEngine ;
22- using SerializationUtility = Sirenix . Serialization . SerializationUtility ;
2321
2422namespace Giezi . Tools
2523{
@@ -108,9 +106,8 @@ public void NotifyOverrideChangeInState(string name, bool isOverriden)
108106 targetFieldInfo . GetValue ( _target ) == parentFieldInfo . GetValue ( _parent ) )
109107 {
110108 object parentObject = parentFieldInfo . GetValue ( _parent ) ;
111- byte [ ] parentAsData = SerializationUtility . SerializeValueWeak ( parentObject , DataFormat . Binary ) ;
112109 object parentObjectCopy =
113- SerializationUtility . DeserializeValueWeak ( parentAsData , DataFormat . Binary ) ;
110+ Clone ( parentObject ) ;
114111 targetFieldInfo . SetValue ( _target , parentObjectCopy ) ;
115112 }
116113 }
@@ -233,8 +230,9 @@ private Tuple<string, T, List<string>, List<string>> ExtractData(string data)
233230
234231 private List < string > DeserializeChildrenData ( string data )
235232 {
236- byte [ ] childrenDataStream = data . Split ( ',' ) . ToList ( ) . Select ( source => byte . Parse ( source ) ) . ToArray ( ) ;
237- var children = SerializationUtility . DeserializeValue < List < string > > ( childrenDataStream , DataFormat . Binary ) ;
233+ // byte[] childrenDataStream = data.Split(',').ToList().Select(source => byte.Parse(source)).ToArray();
234+ // var children = SerializationUtility.DeserializeValue<List<string>>(childrenDataStream, DataFormat.Binary);
235+ var children = JsonConvert . DeserializeObject < List < string > > ( data ) ;
238236 return children ;
239237 }
240238
@@ -507,5 +505,19 @@ private string ReadUpdatedMetaFile(string oldData)
507505
508506 return oldData ;
509507 }
508+
509+ private T Clone < T > ( T source )
510+ {
511+ var jsonSettings = new Newtonsoft . Json . JsonSerializerSettings ( ) {
512+ // Use this option
513+ //
514+ // to ignore reference looping option
515+ ReferenceLoopHandling = Newtonsoft . Json . ReferenceLoopHandling . Ignore ,
516+ // Use this option when properties use an Interface as the type
517+ TypeNameHandling = Newtonsoft . Json . TypeNameHandling . All
518+ } ;
519+ var serialized = JsonConvert . SerializeObject ( source , jsonSettings ) ;
520+ return JsonConvert . DeserializeObject < T > ( serialized , jsonSettings ) ;
521+ }
510522 }
511523}
0 commit comments