private static void b(Type A_0) { if (JsonMapper.k.ContainsKey(A_0)) { return; } ab value = default(ab); if (A_0.GetInterface("System.Collections.IDictionary") != null) { value.a(true); } value.a(new Dictionary <string, p>()); PropertyInfo[] properties = A_0.GetProperties(); for (int i = 0; i < properties.Length; i++) { PropertyInfo propertyInfo = properties[i]; if (propertyInfo.Name == "Item") { ParameterInfo[] indexParameters = propertyInfo.GetIndexParameters(); if (indexParameters.Length == 1 && indexParameters[0].ParameterType == typeof(string)) { value.a(propertyInfo.PropertyType); } } else { p value2 = default(p); value2.a = propertyInfo; value2.c = propertyInfo.PropertyType; value.a().Add(propertyInfo.Name, value2); } } FieldInfo[] fields = A_0.GetFields(); for (int j = 0; j < fields.Length; j++) { FieldInfo fieldInfo = fields[j]; p value3 = default(p); value3.a = fieldInfo; value3.b = true; value3.c = fieldInfo.FieldType; value.a().Add(fieldInfo.Name, value3); } lock (JsonMapper.l) { try { JsonMapper.k.Add(A_0, value); } catch (ArgumentException) { } } }
private static object a(Type A_0, JsonReader A_1) { A_1.Read(); if (A_1.Token == JsonToken.ArrayEnd) { return(null); } Type underlyingType = Nullable.GetUnderlyingType(A_0); Type type = underlyingType ?? A_0; if (A_1.Token == JsonToken.Null) { if (A_0.IsClass || underlyingType != null) { return(null); } throw new JsonException(string.Format("Can't assign null to an instance of type {0}", A_0)); } else { if (A_1.Token != JsonToken.Double && A_1.Token != JsonToken.Int && A_1.Token != JsonToken.Long && A_1.Token != JsonToken.String && A_1.Token != JsonToken.Float && A_1.Token != JsonToken.Boolean) { object obj = null; if (A_1.Token == JsonToken.ArrayStart) { JsonMapper.c(A_0); w w = JsonMapper.g[A_0]; if (!w.a() && !w.c()) { throw new JsonException(string.Format("Type {0} can't act as an array", A_0)); } IList list; Type type2; if (!w.a()) { list = (IList)Activator.CreateInstance(A_0); type2 = w.b(); } else { list = new ArrayList(); type2 = A_0.GetElementType(); } while (true) { object obj2 = JsonMapper.a(type2, A_1); if (obj2 == null && A_1.Token == JsonToken.ArrayEnd) { break; } list.Add(obj2); } if (w.a()) { int count = list.Count; obj = Array.CreateInstance(type2, count); for (int i = 0; i < count; i++) { ((Array)obj).SetValue(list[i], i); } } else { obj = list; } } else if (A_1.Token == JsonToken.ObjectStart) { JsonMapper.b(type); ab ab = JsonMapper.k[type]; obj = Activator.CreateInstance(type); string text; while (true) { A_1.Read(); if (A_1.Token == JsonToken.ObjectEnd) { return(obj); } text = (string)A_1.Value; if (ab.a().ContainsKey(text)) { p p = ab.a()[text]; if (p.b) { ((FieldInfo)p.a).SetValue(obj, JsonMapper.a(p.c, A_1)); } else { PropertyInfo propertyInfo = (PropertyInfo)p.a; if (propertyInfo.CanWrite) { propertyInfo.SetValue(obj, JsonMapper.a(p.c, A_1), null); } else { JsonMapper.a(p.c, A_1); } } } else if (!ab.c()) { if (!A_1.SkipNonMembers) { break; } JsonMapper.a(A_1); } else { ((IDictionary)obj).Add(text, JsonMapper.a(ab.b(), A_1)); } } throw new JsonException(string.Format("The type {0} doesn't have the property '{1}'", A_0, text)); } return(obj); } Type type3 = A_1.Value.GetType(); if (type.IsAssignableFrom(type3)) { return(A_1.Value); } if (JsonMapper.f.ContainsKey(type3) && JsonMapper.f[type3].ContainsKey(type)) { n n = JsonMapper.f[type3][type]; return(n(A_1.Value)); } if (JsonMapper.e.ContainsKey(type3) && JsonMapper.e[type3].ContainsKey(type)) { n n2 = JsonMapper.e[type3][type]; return(n2(A_1.Value)); } if (type.IsEnum) { return(Enum.ToObject(type, A_1.Value)); } MethodInfo methodInfo = JsonMapper.a(type, type3); if (methodInfo != null) { return(methodInfo.Invoke(null, new object[] { A_1.Value })); } throw new JsonException(string.Format("Can't assign value '{0}' (type {1}) to type {2}", A_1.Value, type3, A_0)); } }