public static Dictionary <string, object> ElementToDict(DataCenterElement element) { var result = element.Attributes.ToDictionary( entry => entry.Key, entry => entry.Value.Value ); foreach (var child in element.Children()) { var attr = (List <Dictionary <string, object> >)result.GetValueOrDefault(child.Name, new List <Dictionary <string, object> >()); attr.Add(ElementToDict(child)); result[child.Name] = attr; } return(result); }
static void WriteElement(XmlWriter writer, DataCenterElement element) { writer.WriteStartElement(element.Name); foreach (var(name, value) in element.Attributes.Tuples()) { writer.WriteAttributeString(name, value.ToString()); } foreach (var elem in element.Children()) { WriteElement(writer, elem); } writer.WriteEndElement(); }
static void WriteElement(JsonWriter writer, DataCenterElement element) { writer.WriteStartObject(); foreach (var(name, value) in element.Attributes.Tuples()) { writer.WritePropertyName(name); switch (value.TypeCode) { case DataCenterTypeCode.Int32: writer.WriteValue(value.AsInt32); break; case DataCenterTypeCode.Single: writer.WriteValue(value.AsSingle); break; case DataCenterTypeCode.String: writer.WriteValue(value.AsString); break; case DataCenterTypeCode.Boolean: writer.WriteValue(value.AsBoolean); break; } } foreach (var grp in element.Children().GroupBy(x => x.Name)) { writer.WritePropertyName(grp.Key); writer.WriteStartArray(); foreach (var elem in grp) { WriteElement(writer, elem); } writer.WriteEndArray(); } writer.WriteEndObject(); }
public static IEnumerable <DataCenterElement> FindElements(DataCenterElement element, params string[] path) { if (path.Length == 0) { return(new List <DataCenterElement>() { element }); } var elements = element.Children(path.First()); elements = path.Skip(1) .Aggregate( elements, (current, name) => current.SelectMany(elem => elem.Children(name)) ); return(elements); }
public static DataCenterElement Child(this DataCenterElement element, string name) => element.Children(name).SingleOrDefault();