У меня довольно большой набор данных, который структурирован несколько уникальным образом.Это выглядит примерно так:
foo:
- name: "some name"
location: "some location"
type: "someType"
bar:
- name: "A bar element"
location: "location here"
type: "someOtherType"
attachments:
- type: "attachmentTypeA"
name: "Attachment name"
- type: "attachmentTypeB"
name: "Attachment name"
baz:
- name: "another name"
location: "another location"
type: "anotherType"
qux:
- name: "My name here"
location: "My location here"
type: "SomeOtherTypeHere"
xyzzy:
- name: "Another name here"
location: "Another location here"
type: "anotherTypeHere"
bar:
- name: "Some name here"
location: "Some location here"
type: "typeHere"
attachments:
- type: "attachmentTypeA"
name: "attachment name here"
- type: "attachmentTypeA"
name: "attachment name here"
- type: "attachmentTypeB"
name: "attachment name here"
- name: "Another name here"
location: "Another location here"
type: "anotherTypeHere"
attachments:
- type: "attachmentTypeA"
name: "attachment name here"
- type: "attachmentTypeC"
name: "attachment name here"
- type: "attachmentTypeD"
name: "attachment name here"
- name: "Another baz listing"
location: "Baz location"
type: "bazTypeHere"
Таким образом, у вас есть «foo» на верхнем уровне (и может быть более одного foo, но всегда на верхнем уровне).В общем случае структура выглядит так:
foo> baz> qux> xyzzy> bar
Однако любой из подэлементов может находиться в корне или под foo, если они находятся в порядке,Итак, они действительны:
foo
qux
xyzzy
bar
attachments
bar
attachments
Как это:
foo
baz
qux
xyzzy
bar
attachments
bar
attachments
qux
xyzzy
bar
attachments
bar
attachments
xyzzy
bar
attachments
bar
attachments
И так далее.Это странно, я знаю.Но это набор данных, который я унаследовал.Я посмотрел на примеры, в частности примеры DeserializeObjectGraph и LoadingAYamlStream.Подход DeserializeObjectGraph становится несколько сумасшедшим, когда данные располагаются следующим образом.Я наконец отказался от этого, поскольку это только стало слишком волосатым.Я думаю, что потоковый подход лучше подходит, но я сталкиваюсь с проблемами.
Я загружаю YAML следующим образом:
string contents = System.IO.File.ReadAllText ( fileName );
var input = new StringReader (contents);
var yaml = new YamlStream ();
yaml.Load (input);
Как видите, ничегофантазии там.Я просто пытаюсь получить «дерево» объектов, которое затем могу перебрать.Я попытался использовать свойство AllNodes из корневого узла, но я не могу понять, как рекурсивно итеративно выполнять итерацию по ним, чем имеет смысл.Я также признаюсь, что я C # n00btard, который все еще учится (старый C-парень здесь), так что терпите меня!
Может кто-нибудь предложить подход, или, возможно, некоторый код или даже псевдокод, который мог бывыручить меня?