private void ToEntryForList(List <ComplexEntry> entries, ComplexEntry parent, IObjectNode obj) { switch (obj.Type) { case NodeType.Int: if (parent.i32a == null) { parent.i32a = new List <IntListEntry>(); } parent.i32a.Add(new IntListEntry { n = obj.Name, c = obj.ListCount, nil = obj.IsNull, v = obj.Children.Select(c => new IntEntry { n = c.Name, v = (int)c.Value, }).ToList(), }); break; case NodeType.Float: if (parent.fa == null) { parent.fa = new List <FloatListEntry>(); } parent.fa.Add(new FloatListEntry { n = obj.Name, c = obj.ListCount, nil = obj.IsNull, v = obj.Children.Select(c => new FloatEntry { n = c.Name, v = (float)c.Value, }).ToList(), }); break; case NodeType.String: if (parent.sa == null) { parent.sa = new List <StringListEntry>(); } parent.sa.Add(new StringListEntry { n = obj.Name, c = obj.ListCount, nil = obj.IsNull, v = obj.Children.Select(c => new StringEntry { n = c.Name, v = (string)c.Value, }).ToList(), }); break; case NodeType.Complex: var name = parent == null ? RootName : (parent.n + "/" + obj.Name); var self = new ComplexEntry { n = name, nil = obj.IsNull, list = obj.IsList, listc = obj.ListCount, }; entries.Add(self); foreach (var n in obj.Children) { ToEntry(entries, self, n); } break; } }
private void ToEntry(List <ComplexEntry> entries, ComplexEntry parent, IObjectNode obj) { if (obj.IsList) { ToEntryForList(entries, parent, obj); return; } switch (obj.Type) { case NodeType.Int: if (parent.i32 == null) { parent.i32 = new List <IntEntry>(); } parent.i32.Add(new IntEntry { n = obj.Name, v = (int)obj.Value, }); break; case NodeType.Float: if (parent.f == null) { parent.f = new List <FloatEntry>(); } parent.f.Add(new FloatEntry { n = obj.Name, v = (float)obj.Value, }); break; case NodeType.String: if (parent.s == null) { parent.s = new List <StringEntry>(); } parent.s.Add(new StringEntry { n = obj.Name, v = (string)obj.Value, }); break; case NodeType.Complex: var name = parent == null ? RootName : (parent.n + "/" + obj.Name); var self = new ComplexEntry { n = name, nil = obj.IsNull, }; entries.Add(self); foreach (var n in obj.Children) { ToEntry(entries, self, n); } break; } }