Skip to content

Commit 033ae82

Browse files
committed
when moving to newtonsoft, serialization and deserialization scheme changed, but was kept in certain parts, need to fix this
1 parent d9cdc39 commit 033ae82

1 file changed

Lines changed: 27 additions & 19 deletions

File tree

Editor/SOVariant.cs

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)