コード例 #1
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
                                        JsonSerializer serializer)
        {
            var jObject = JObject.Load(reader);

            if (jObject == null)
            {
                return(null);
            }

            var result = new Attribute();

            //remove this converter to do regular conversion
            serializer.Converters.Remove(this);
            try
            {
                //this will populate everything except the value itself
                serializer.Populate(jObject.CreateReader(), result);

                //get value property, populate it into proper type and add to attribute
                AttributeValue value;
                var            strType = jObject.GetValue("StringAttributeValue");
                if (strType != null)
                {
                    value = new StringAttributeValue();
                    serializer.Populate(strType.CreateReader(), value);
                    result.Value = value;
                    return(result);
                }
                var decType = jObject.GetValue("DecimalAttributeValue");
                if (decType != null)
                {
                    value = new DecimalAttributeValue();
                    serializer.Populate(decType.CreateReader(), value);
                    result.Value = value;
                    return(result);
                }
                var boolType = jObject.GetValue("BooleanAttributeValue");
                if (boolType != null)
                {
                    value = new BooleanAttributeValue();
                    serializer.Populate(boolType.CreateReader(), value);
                    result.Value = value;
                    return(result);
                }
                var intType = jObject.GetValue("IntegerAttributeValue");
                if (intType != null)
                {
                    value = new IntegerAttributeValue();
                    serializer.Populate(intType.CreateReader(), value);
                    result.Value = value;
                    return(result);
                }
                var dateType = jObject.GetValue("DateTimeAttributeValue");
                if (dateType != null)
                {
                    value = new DateTimeAttributeValue();
                    serializer.Populate(dateType.CreateReader(), value);
                    result.Value = value;
                    return(result);
                }
            }
            finally
            {
                //add converter back again
                serializer.Converters.Add(this);
            }
            return(result);
        }
コード例 #2
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
            JsonSerializer serializer)
        {
            var jObject = JObject.Load(reader);
            if (jObject == null) return null;

            var result = new Attribute();

            //remove this converter to do regular conversion
            serializer.Converters.Remove(this);
            try
            {
                //this will populate everything except the value itself
                serializer.Populate(jObject.CreateReader(), result);

                //get value property, populate it into proper type and add to attribute
                AttributeValue value;
                var strType = jObject.GetValue("StringAttributeValue");
                if (strType != null)
                {
                    value = new StringAttributeValue();
                    serializer.Populate(strType.CreateReader(), value);
                    result.Value = value;
                    return result;
                }
                var decType = jObject.GetValue("DecimalAttributeValue");
                if (decType != null)
                {
                    value = new DecimalAttributeValue();
                    serializer.Populate(decType.CreateReader(), value);
                    result.Value = value;
                    return result;
                }
                var boolType = jObject.GetValue("BooleanAttributeValue");
                if (boolType != null)
                {
                    value = new BooleanAttributeValue();
                    serializer.Populate(boolType.CreateReader(), value);
                    result.Value = value;
                    return result;
                }
                var intType = jObject.GetValue("IntegerAttributeValue");
                if (intType != null)
                {
                    value = new IntegerAttributeValue();
                    serializer.Populate(intType.CreateReader(), value);
                    result.Value = value;
                    return result;
                }
                var dateType = jObject.GetValue("DateTimeAttributeValue");
                if (dateType != null)
                {
                    value = new DateTimeAttributeValue();
                    serializer.Populate(dateType.CreateReader(), value);
                    result.Value = value;
                    return result;
                }
            }
            finally
            {
                //add converter back again
                serializer.Converters.Add(this);
            }
            return result;
        }