Beispiel #1
0
        public override PipelineContextData Clone()
        {
            var result = new CaseSensitiveDictionaryContextData();

            if (m_list?.Count > 0)
            {
                result.m_list = new List <DictionaryContextDataPair>(m_list.Count);
                foreach (var item in m_list)
                {
                    result.m_list.Add(new DictionaryContextDataPair(item.Key, item.Value?.Clone()));
                }
            }

            return(result);
        }
        public override Object ReadJson(
            JsonReader reader,
            Type objectType,
            Object existingValue,
            JsonSerializer serializer)
        {
            switch (reader.TokenType)
            {
            case JsonToken.String:
                return(new StringContextData(reader.Value.ToString()));

            case JsonToken.Boolean:
                return(new BooleanContextData((Boolean)reader.Value));

            case JsonToken.Float:
                return(new NumberContextData((Double)reader.Value));

            case JsonToken.Integer:
                return(new NumberContextData((Double)(Int64)reader.Value));

            case JsonToken.StartObject:
                break;

            default:
                return(null);
            }

            Int32?  type  = null;
            JObject value = JObject.Load(reader);

            if (!value.TryGetValue("t", StringComparison.OrdinalIgnoreCase, out JToken typeValue))
            {
                type = PipelineContextDataType.String;
            }
            else if (typeValue.Type == JTokenType.Integer)
            {
                type = (Int32)typeValue;
            }
            else
            {
                return(existingValue);
            }

            Object newValue = null;

            switch (type)
            {
            case PipelineContextDataType.String:
                newValue = new StringContextData(null);
                break;

            case PipelineContextDataType.Array:
                newValue = new ArrayContextData();
                break;

            case PipelineContextDataType.Dictionary:
                newValue = new DictionaryContextData();
                break;

            case PipelineContextDataType.Boolean:
                newValue = new BooleanContextData(false);
                break;

            case PipelineContextDataType.Number:
                newValue = new NumberContextData(0);
                break;

            case PipelineContextDataType.CaseSensitiveDictionary:
                newValue = new CaseSensitiveDictionaryContextData();
                break;

            default:
                throw new NotSupportedException($"Unexpected {nameof(PipelineContextDataType)} '{type}'");
            }

            if (value != null)
            {
                using (JsonReader objectReader = value.CreateReader())
                {
                    serializer.Populate(objectReader, newValue);
                }
            }

            return(newValue);
        }