public override PipelineContextData Clone() { var result = new ArrayContextData(); if (m_items?.Count > 0) { result.m_items = new List <PipelineContextData>(m_items.Count); foreach (var item in m_items) { result.m_items.Add(item); } } return(result); }
public static PipelineContextData ToContextData(this TemplateToken token) { switch (token.Type) { case TokenType.Mapping: var mapping = token as MappingToken; var dictionary = new DictionaryContextData(); if (mapping.Count > 0) { foreach (var pair in mapping) { var keyLiteral = pair.Key.AssertString("dictionary context data key"); var key = keyLiteral.Value; var value = pair.Value.ToContextData(); dictionary.Add(key, value); } } return(dictionary); case TokenType.Sequence: var sequence = token as SequenceToken; var array = new ArrayContextData(); if (sequence.Count > 0) { foreach (var item in sequence) { array.Add(item.ToContextData()); } } return(array); case TokenType.Null: return(null); case TokenType.Boolean: var boolean = token as BooleanToken; return(new BooleanContextData(boolean.Value)); case TokenType.Number: var number = token as NumberToken; return(new NumberContextData(number.Value)); case TokenType.String: var stringToken = token as StringToken; return(new StringContextData(stringToken.Value)); default: throw new NotSupportedException($"Unexpected {nameof(TemplateToken)} type '{token.Type}'"); } }
public static PipelineContextData ToPipelineContextData( this JToken value, Int32 depth, Int32 maxDepth) { if (depth < maxDepth) { if (value.Type == JTokenType.String) { return(new StringContextData((String)value)); } else if (value.Type == JTokenType.Boolean) { return(new BooleanContextData((Boolean)value)); } else if (value.Type == JTokenType.Float || value.Type == JTokenType.Integer) { return(new NumberContextData((Double)value)); } else if (value.Type == JTokenType.Object) { var subContext = new DictionaryContextData(); var obj = (JObject)value; foreach (var property in obj.Properties()) { subContext[property.Name] = ToPipelineContextData(property.Value, depth + 1, maxDepth); } return(subContext); } else if (value.Type == JTokenType.Array) { var arrayContext = new ArrayContextData(); var arr = (JArray)value; foreach (var element in arr) { arrayContext.Add(ToPipelineContextData(element, depth + 1, maxDepth)); } return(arrayContext); } else if (value.Type == JTokenType.Null) { return(null); } } // We don't understand the type or have reached our max, return as string return(new StringContextData(value.ToString())); }
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); }