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); }