public override bool CanConvert(Type objectType) { if (typeof(IEnumerable).IsAssignableFrom(objectType)) { return(false); } object[] customAttributes = objectType.GetCustomAttributes(true); bool flag = false; object[] array = customAttributes; for (int i = 0; i < array.Length; i++) { object obj = array[i]; Type type = obj.GetType(); if (type.Name == "CompilationMappingAttribute") { DiscriminatedUnionConverter.EnsureInitialized(type); flag = true; break; } } if (!flag) { return(false); } MethodCall <object, object> arg_83_0 = DiscriminatedUnionConverter._isUnion; object arg_83_1 = null; object[] array2 = new object[2]; array2[0] = objectType; return((bool)arg_83_0(arg_83_1, array2)); }
private static void ReadAndAssertProperty(JsonReader reader, string propertyName) { DiscriminatedUnionConverter.ReadAndAssert(reader); if (reader.TokenType != JsonToken.PropertyName || !string.Equals(reader.Value.ToString(), propertyName, StringComparison.OrdinalIgnoreCase)) { throw new JsonSerializationException("Expected JSON property '{0}'.".FormatWith(CultureInfo.InvariantCulture, propertyName)); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) { return(null); } MethodCall <object, object> arg_21_0 = DiscriminatedUnionConverter._getUnionCases; object arg_21_1 = null; object[] array = new object[2]; array[0] = objectType; IEnumerable enumerable = (IEnumerable)arg_21_0(arg_21_1, array); DiscriminatedUnionConverter.ReadAndAssertProperty(reader, "Case"); DiscriminatedUnionConverter.ReadAndAssert(reader); string text = reader.Value.ToString(); object obj = null; foreach (object current in enumerable) { if ((string)DiscriminatedUnionConverter._getUnionCaseInfoName(current) == text) { obj = current; break; } } if (obj == null) { throw new JsonSerializationException("No union type found with the name '{0}'.".FormatWith(CultureInfo.InvariantCulture, text)); } DiscriminatedUnionConverter.ReadAndAssertProperty(reader, "Fields"); DiscriminatedUnionConverter.ReadAndAssert(reader); DiscriminatedUnionConverter.ReadAndAssert(reader); PropertyInfo[] array2 = (PropertyInfo[])DiscriminatedUnionConverter._getUnionCaseInfoFields(obj, new object[0]); List <object> list = new List <object>(); PropertyInfo[] array3 = array2; for (int i = 0; i < array3.Length; i++) { PropertyInfo propertyInfo = array3[i]; list.Add(serializer.Deserialize(reader, propertyInfo.PropertyType)); DiscriminatedUnionConverter.ReadAndAssert(reader); } DiscriminatedUnionConverter.ReadAndAssert(reader); MethodCall <object, object> arg_164_0 = DiscriminatedUnionConverter._makeUnion; object arg_164_1 = null; object[] array4 = new object[3]; array4[0] = obj; array4[1] = list.ToArray(); return(arg_164_0(arg_164_1, array4)); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { DefaultContractResolver defaultContractResolver = serializer.ContractResolver as DefaultContractResolver; Type type = value.GetType(); MethodCall <object, object> arg_29_0 = DiscriminatedUnionConverter._getUnionFields; object arg_29_1 = null; object[] array = new object[3]; array[0] = value; array[1] = type; object arg = arg_29_0(arg_29_1, array); object arg2 = DiscriminatedUnionConverter._getUnionCaseInfo(arg); object value2 = DiscriminatedUnionConverter._getUnionCaseFields(arg); object obj = DiscriminatedUnionConverter._getUnionCaseInfoName(arg2); writer.WriteStartObject(); writer.WritePropertyName((defaultContractResolver != null) ? defaultContractResolver.GetResolvedPropertyName("Case") : "Case"); writer.WriteValue((string)obj); writer.WritePropertyName((defaultContractResolver != null) ? defaultContractResolver.GetResolvedPropertyName("Fields") : "Fields"); serializer.Serialize(writer, value2); writer.WriteEndObject(); }