Ejemplo n.º 1
0
 // Token: 0x0600015C RID: 348 RVA: 0x0000C670 File Offset: 0x0000A870
 private static void DeserializeObject(Task task, object obj, Dictionary <string, object> dict, IVariableSource variableSource, List <UnityEngine.Object> unityObjects)
 {
     if (dict == null)
     {
         return;
     }
     FieldInfo[] allFields = TaskUtility.GetAllFields(obj.GetType());
     for (int i = 0; i < allFields.Length; i++)
     {
         string key = (!JSONDeserialization.updatedSerialization) ? (allFields[i].FieldType.Name.GetHashCode() + allFields[i].Name.GetHashCode()).ToString() : (allFields[i].FieldType.Name + allFields[i].Name);
         object obj2;
         if (dict.TryGetValue(key, out obj2))
         {
             if (typeof(IList).IsAssignableFrom(allFields[i].FieldType))
             {
                 IList list = obj2 as IList;
                 if (list != null)
                 {
                     Type type;
                     if (allFields[i].FieldType.IsArray)
                     {
                         type = allFields[i].FieldType.GetElementType();
                     }
                     else
                     {
                         Type type2 = allFields[i].FieldType;
                         while (!type2.IsGenericType)
                         {
                             type2 = type2.BaseType;
                         }
                         type = type2.GetGenericArguments()[0];
                     }
                     bool flag = type.Equals(typeof(Task)) || type.IsSubclassOf(typeof(Task));
                     if (flag)
                     {
                         if (JSONDeserialization.taskIDs != null)
                         {
                             List <int> list2 = new List <int>();
                             for (int j = 0; j < list.Count; j++)
                             {
                                 list2.Add(Convert.ToInt32(list[j]));
                             }
                             JSONDeserialization.taskIDs.Add(new JSONDeserialization.TaskField(task, allFields[i]), list2);
                         }
                     }
                     else if (allFields[i].FieldType.IsArray)
                     {
                         Array array = Array.CreateInstance(type, list.Count);
                         for (int k = 0; k < list.Count; k++)
                         {
                             if (list[k] == null)
                             {
                                 array.SetValue(null, k);
                             }
                             else
                             {
                                 array.SetValue(JSONDeserialization.ValueToObject(task, type, list[k], variableSource, unityObjects), k);
                             }
                         }
                         allFields[i].SetValue(obj, array);
                     }
                     else
                     {
                         IList list3;
                         if (allFields[i].FieldType.IsGenericType)
                         {
                             list3 = (TaskUtility.CreateInstance(typeof(List <>).MakeGenericType(new Type[]
                             {
                                 type
                             })) as IList);
                         }
                         else
                         {
                             list3 = (TaskUtility.CreateInstance(allFields[i].FieldType) as IList);
                         }
                         for (int l = 0; l < list.Count; l++)
                         {
                             if (list[l] == null)
                             {
                                 list3.Add(null);
                             }
                             else
                             {
                                 list3.Add(JSONDeserialization.ValueToObject(task, type, list[l], variableSource, unityObjects));
                             }
                         }
                         allFields[i].SetValue(obj, list3);
                     }
                 }
             }
             else
             {
                 Type fieldType = allFields[i].FieldType;
                 if (fieldType.Equals(typeof(Task)) || fieldType.IsSubclassOf(typeof(Task)))
                 {
                     if (TaskUtility.HasAttribute(allFields[i], typeof(InspectTaskAttribute)))
                     {
                         Dictionary <string, object> dictionary = obj2 as Dictionary <string, object>;
                         Type typeWithinAssembly = TaskUtility.GetTypeWithinAssembly(dictionary["Type"] as string);
                         if (typeWithinAssembly != null)
                         {
                             Task task2 = TaskUtility.CreateInstance(typeWithinAssembly) as Task;
                             JSONDeserialization.DeserializeObject(task2, task2, dictionary, variableSource, unityObjects);
                             allFields[i].SetValue(task, task2);
                         }
                     }
                     else if (JSONDeserialization.taskIDs != null)
                     {
                         List <int> list4 = new List <int>();
                         list4.Add(Convert.ToInt32(obj2));
                         JSONDeserialization.taskIDs.Add(new JSONDeserialization.TaskField(task, allFields[i]), list4);
                     }
                 }
                 else
                 {
                     allFields[i].SetValue(obj, JSONDeserialization.ValueToObject(task, fieldType, obj2, variableSource, unityObjects));
                 }
             }
         }
         else if (typeof(SharedVariable).IsAssignableFrom(allFields[i].FieldType) && !allFields[i].FieldType.IsAbstract)
         {
             if (dict.TryGetValue((allFields[i].FieldType.Name.GetHashCode() + allFields[i].Name.GetHashCode()).ToString(), out obj2))
             {
                 SharedVariable sharedVariable = TaskUtility.CreateInstance(allFields[i].FieldType) as SharedVariable;
                 sharedVariable.SetValue(JSONDeserialization.ValueToObject(task, allFields[i].FieldType, obj2, variableSource, unityObjects));
                 allFields[i].SetValue(obj, sharedVariable);
             }
             else
             {
                 SharedVariable sharedVariable2 = TaskUtility.CreateInstance(allFields[i].FieldType) as SharedVariable;
                 SharedVariable sharedVariable3 = allFields[i].GetValue(obj) as SharedVariable;
                 if (sharedVariable3 != null)
                 {
                     sharedVariable2.SetValue(sharedVariable3.GetValue());
                 }
                 allFields[i].SetValue(obj, sharedVariable2);
             }
         }
     }
 }