public static dynamic ToPoco(this YamlNode topNode, CleanNameDelegate cleanNameFunc = null) { var expandoDict = new ExpandoObject() as IDictionary <string, object>; switch (topNode) { case YamlMappingNode mapping: ProcessMappingChildren(expandoDict, mapping); break; case YamlSequenceNode sequence: return(sequence.Select(s => ToPoco(s, cleanNameFunc)).ToArray()); case YamlScalarNode scalar: var v = ProcessScalarNode(scalar); return(v); } return(expandoDict); }
private static void ProcessMappingChildren(IDictionary <string, object> expandoDict, YamlMappingNode mapping, CleanNameDelegate cleanNameFunc = null) { if (cleanNameFunc == null) { cleanNameFunc = DefaultCleanNameFunc; } foreach (var entry in mapping.Children) { dynamic v; switch (entry.Value) { case YamlScalarNode scalerNode: v = ProcessScalarNode(scalerNode); break; case YamlMappingNode mappingNode: v = ToPoco(mappingNode, cleanNameFunc); break; case YamlSequenceNode sequenceNode: v = sequenceNode.Children.Select(s => ToPoco(s, cleanNameFunc)).ToArray(); break; default: v = ""; break; } var key = cleanNameFunc(((YamlScalarNode)entry.Key).Value); expandoDict.Add(key, v); } }
public static T ToPoco <T>(this YamlNode topNode, CleanNameDelegate cleanNameFunc = null) { var json = ToJson(topNode, cleanNameFunc); return(JsonConvert.DeserializeObject <T>(json)); }
public static string ToJson(this YamlNode topNode, CleanNameDelegate cleanNameFunc = null) { var poco = ToPoco(topNode, cleanNameFunc); return(JsonConvert.SerializeObject(poco)); }