@@ -106,8 +106,17 @@ public void NotifyOverrideChangeInState(string name, bool isOverriden)
106106 targetFieldInfo . GetValue ( _target ) == parentFieldInfo . GetValue ( _parent ) )
107107 {
108108 object parentObject = parentFieldInfo . GetValue ( _parent ) ;
109- object parentObjectCopy =
110- Clone ( parentObject ) ;
109+
110+ var jsonSettings = new Newtonsoft . Json . JsonSerializerSettings ( ) {
111+ // Use this option
112+ //
113+ // to ignore reference looping option
114+ ReferenceLoopHandling = Newtonsoft . Json . ReferenceLoopHandling . Ignore ,
115+ // Use this option when properties use an Interface as the type
116+ TypeNameHandling = Newtonsoft . Json . TypeNameHandling . All
117+ } ;
118+ var serialized = JsonConvert . SerializeObject ( parentObject , jsonSettings ) ;
119+ object parentObjectCopy = JsonConvert . DeserializeObject < object > ( serialized , jsonSettings ) ;
111120 targetFieldInfo . SetValue ( _target , parentObjectCopy ) ;
112121 }
113122 }
@@ -182,11 +191,13 @@ public void LoadData(T targetObject)
182191
183192 private Tuple < string , T , List < string > , List < string > > ExtractData ( string data )
184193 {
185- if ( string . IsNullOrEmpty ( data ) )
194+ if ( ! CheckForDataString ( data ) )
186195 return new Tuple < string , T , List < string > , List < string > > ( null , null , null , null ) ;
187196 try
188197 {
189- string dataJson = JsonConvert . DeserializeObject < Dictionary < string , string > > ( data ) [ "SOVariantData" ] ;
198+ string dataJson = GetSOVariantData ( data ) ;
199+ if ( ! CheckForDataString ( dataJson ) )
200+ return new Tuple < string , T , List < string > , List < string > > ( null , null , null , null ) ;
190201 Dictionary < string , string > containedData =
191202 JsonConvert . DeserializeObject < Dictionary < string , string > > ( dataJson ) ;
192203
@@ -224,10 +235,20 @@ private Tuple<string, T, List<string>, List<string>> ExtractData(string data)
224235 return ExtractData ( ReadUpdatedMetaFile ( data ) ) ;
225236 }
226237 }
227-
228238 return null ;
229239 }
230240
241+ private static string GetSOVariantData ( string data )
242+ {
243+ string dataJson = JsonConvert . DeserializeObject < Dictionary < string , string > > ( data ) [ "SOVariantData" ] ;
244+ return dataJson ;
245+ }
246+
247+ private bool CheckForDataString ( string data )
248+ {
249+ return ! string . IsNullOrEmpty ( data ) ;
250+ }
251+
231252 private List < string > DeserializeChildrenData ( string data )
232253 {
233254 // byte[] childrenDataStream = data.Split(',').ToList().Select(source => byte.Parse(source)).ToArray();
@@ -353,6 +374,7 @@ private void PropagateValuesToChildren(T target, string targetGUID, ref List<str
353374
354375 private void AddToChildrenData ( AssetImporter importer , string newChild )
355376 {
377+ Debug . Log ( importer . userData ) ;
356378 string [ ] data = importer . userData . Split ( '*' ) ;
357379 if ( data . Length != 3 )
358380 {
@@ -505,19 +527,5 @@ private string ReadUpdatedMetaFile(string oldData)
505527
506528 return oldData ;
507529 }
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- }
522530 }
523531}
0 commit comments