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