Обработка большого набора данных вложенных данных - PullRequest
0 голосов
/ 22 ноября 2018

У меня довольно большой набор данных, который структурирован несколько уникальным образом.Это выглядит примерно так:

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-парень здесь), так что терпите меня!

Может кто-нибудь предложить подход, или, возможно, некоторый код или даже псевдокод, который мог бывыручить меня?

...