Exemple #1
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object?value, JsonSerializer serializer)
        {
            if (value == null)
            {
                writer.WriteNull();
                return;
            }

            ReflectionObject reflectionObject = ReflectionObjectPerType.Get(value.GetType());

            DefaultContractResolver?resolver =
                serializer.ContractResolver as DefaultContractResolver;

            writer.WriteStartObject();
            writer.WritePropertyName(
                (resolver != null) ? resolver.GetResolvedPropertyName(KeyName) : KeyName
                );
            serializer.Serialize(
                writer,
                reflectionObject.GetValue(value, KeyName),
                reflectionObject.GetType(KeyName)
                );
            writer.WritePropertyName(
                (resolver != null) ? resolver.GetResolvedPropertyName(ValueName) : ValueName
                );
            serializer.Serialize(
                writer,
                reflectionObject.GetValue(value, ValueName),
                reflectionObject.GetType(ValueName)
                );
            writer.WriteEndObject();
        }
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            ReflectionObject        reflectionObject = KeyValuePairConverter.ReflectionObjectPerType.Get(value.GetType());
            DefaultContractResolver contractResolver = serializer.ContractResolver as DefaultContractResolver;

            writer.WriteStartObject();
            writer.WritePropertyName((contractResolver != null ? contractResolver.GetResolvedPropertyName("Key") : "Key"));
            serializer.Serialize(writer, reflectionObject.GetValue(value, "Key"), reflectionObject.GetType("Key"));
            writer.WritePropertyName((contractResolver != null ? contractResolver.GetResolvedPropertyName("Value") : "Value"));
            serializer.Serialize(writer, reflectionObject.GetValue(value, "Value"), reflectionObject.GetType("Value"));
            writer.WriteEndObject();
        }
        /// <summary>
        /// Reads the JSON representation of the object.
        /// </summary>
        /// <param name="reader">The <see cref="JsonReader"/> to read from.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <param name="existingValue">The existing value of object being read.</param>
        /// <param name="serializer">The calling serializer.</param>
        /// <returns>The object value.</returns>
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            bool isNullable = ReflectionUtils.IsNullableType(objectType);

            Type t = (isNullable)
                ? Nullable.GetUnderlyingType(objectType)
                : objectType;

            ReflectionObject reflectionObject = ReflectionObjectPerType.Get(t);

            if (reader.TokenType == JsonToken.Null)
            {
                if (!isNullable)
                {
                    throw JsonSerializationException.Create(reader, "Cannot convert null value to KeyValuePair.");
                }

                return(null);
            }

            object key   = null;
            object value = null;

            reader.Read();

            while (reader.TokenType == JsonToken.PropertyName)
            {
                string propertyName = reader.Value.ToString();
                if (string.Equals(propertyName, KeyName, StringComparison.OrdinalIgnoreCase))
                {
                    reader.Read();
                    key = serializer.Deserialize(reader, reflectionObject.GetType(KeyName));
                }
                else if (string.Equals(propertyName, ValueName, StringComparison.OrdinalIgnoreCase))
                {
                    reader.Read();
                    value = serializer.Deserialize(reader, reflectionObject.GetType(ValueName));
                }
                else
                {
                    reader.Skip();
                }

                reader.Read();
            }

            return(reflectionObject.Creator(key, value));
        }
Exemple #4
0
        public override object ReadJson(
            JsonReader reader,
            Type objectType,
            object existingValue,
            JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                if (!ReflectionUtils.IsNullableType(objectType))
                {
                    throw JsonSerializationException.Create(reader, "Cannot convert null value to KeyValuePair.");
                }
                return((object)null);
            }

            object obj1 = (object)null;
            object obj2 = (object)null;

            reader.ReadAndAssert();
            Type             key = ReflectionUtils.IsNullableType(objectType) ? Nullable.GetUnderlyingType(objectType) : objectType;
            ReflectionObject reflectionObject = KeyValuePairConverter.ReflectionObjectPerType.Get(key);

            while (reader.TokenType == JsonToken.PropertyName)
            {
                string a = reader.Value.ToString();
                if (string.Equals(a, "Key", StringComparison.OrdinalIgnoreCase))
                {
                    reader.ReadAndAssert();
                    obj1 = serializer.Deserialize(reader, reflectionObject.GetType("Key"));
                }
                else if (string.Equals(a, "Value", StringComparison.OrdinalIgnoreCase))
                {
                    reader.ReadAndAssert();
                    obj2 = serializer.Deserialize(reader, reflectionObject.GetType("Value"));
                }
                else
                {
                    reader.Skip();
                }

                reader.ReadAndAssert();
            }

            return(reflectionObject.Creator(new object[2] {
                obj1,
                obj2
            }));
        }
Exemple #5
0
        // Token: 0x060014C0 RID: 5312 RVA: 0x0006E4E4 File Offset: 0x0006C6E4
        public override void WriteJson(JsonWriter writer, [Nullable(2)] object value, JsonSerializer serializer)
        {
            if (value == null)
            {
                writer.WriteNull();
                return;
            }
            ReflectionObject        reflectionObject        = KeyValuePairConverter.ReflectionObjectPerType.Get(value.GetType());
            DefaultContractResolver defaultContractResolver = serializer.ContractResolver as DefaultContractResolver;

            writer.WriteStartObject();
            writer.WritePropertyName((defaultContractResolver != null) ? defaultContractResolver.GetResolvedPropertyName("Key") : "Key");
            serializer.Serialize(writer, reflectionObject.GetValue(value, "Key"), reflectionObject.GetType("Key"));
            writer.WritePropertyName((defaultContractResolver != null) ? defaultContractResolver.GetResolvedPropertyName("Value") : "Value");
            serializer.Serialize(writer, reflectionObject.GetValue(value, "Value"), reflectionObject.GetType("Value"));
            writer.WriteEndObject();
        }
Exemple #6
0
        /// <summary>
        /// Writes the JSON representation of the object.
        /// </summary>
        /// <param name="writer">The <see cref="JsonWriter"/> to write to.</param>
        /// <param name="value">The value.</param>
        /// <param name="serializer">The calling serializer.</param>
        public override void WriteJson(JsonWriter writer, object value, JsonSerializerWriter internalWriter)
        {
            ReflectionObject reflectionObject = ReflectionObjectPerType.Get(value.GetType());

            DefaultContractResolver resolver = internalWriter.Serializer.ContractResolver as DefaultContractResolver;

            writer.WriteStartObject();
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(KeyName) : KeyName);
            internalWriter.Serialize(writer, reflectionObject.GetValue(value, KeyName), reflectionObject.GetType(KeyName));
            writer.WritePropertyName((resolver != null) ? resolver.GetResolvedPropertyName(ValueName) : ValueName);
            internalWriter.Serialize(writer, reflectionObject.GetValue(value, ValueName), reflectionObject.GetType(ValueName));
            writer.WriteEndObject();
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
            {
                if (!ReflectionUtils.IsNullableType(objectType))
                {
                    throw JsonSerializationException.Create(reader, "Cannot convert null value to KeyValuePair.");
                }
                return(null);
            }
            object obj  = null;
            object obj1 = null;

            reader.ReadAndAssert();
            ReflectionObject reflectionObject = KeyValuePairConverter.ReflectionObjectPerType.Get((ReflectionUtils.IsNullableType(objectType) ? Nullable.GetUnderlyingType(objectType) : objectType));
            JsonContract     jsonContract     = serializer.ContractResolver.ResolveContract(reflectionObject.GetType("Key"));
            JsonContract     jsonContract1    = serializer.ContractResolver.ResolveContract(reflectionObject.GetType("Value"));

            while (reader.TokenType == JsonToken.PropertyName)
            {
                string str = reader.Value.ToString();
                if (string.Equals(str, "Key", StringComparison.OrdinalIgnoreCase))
                {
                    reader.ReadForTypeAndAssert(jsonContract, false);
                    obj = serializer.Deserialize(reader, jsonContract.UnderlyingType);
                }
                else if (!string.Equals(str, "Value", StringComparison.OrdinalIgnoreCase))
                {
                    reader.Skip();
                }
                else
                {
                    reader.ReadForTypeAndAssert(jsonContract1, false);
                    obj1 = serializer.Deserialize(reader, jsonContract1.UnderlyingType);
                }
                reader.ReadAndAssert();
            }
            return(reflectionObject.Creator(new object[] { obj, obj1 }));
        }