YAMLファイル
name: test
items:
- id: 1
  name: item1
  subitems:
    - name: sub1-1
- id: 2
  name: item2
  subitems:
    - name: sub2-1
    - name: sub2-2
データクラスの準備
※ もっと良い方法がある筈だが、とりあえずは現状理解できている方法で。
とりあえず、メインクラス TestData、itemsコレクション用のItemDataクラス、subitemsコレクション用のSubItemDataクラスの3つを用意。
YAMLから読み込みオブジェクトを構築する Loadメソッド を TestDataクラスに追加した。
とりあえず、メインクラス TestData、itemsコレクション用のItemDataクラス、subitemsコレクション用のSubItemDataクラスの3つを用意。
Public Class TestData
    Public Property name As String
    Public Property items As New List(Of ItemData)
End Class
    Public Class ItemData
    Public Property id As Integer
    Public Property name As String
    Public Property subitems As New List(Of SubItemData)
End Class
Public Class SubItemData
    Public Property name As String
End Class
YAMLから読み込みオブジェクトを構築する Loadメソッド を TestDataクラスに追加した。
Imports YamlDotNet.RepresentationModel
Public Class TestData
  :
    Public Sub Load()
        Dim yaml As New YamlStream()
        Using sr As New System.IO.StreamReader("test.yaml")
            yaml.Load(sr)
        End Using
        Dim children = DirectCast(yaml.Documents(0).RootNode, YamlMappingNode).Children
        name = DirectCast(children.Item(New YamlScalarNode("name")), YamlScalarNode).Value
        For Each itemNode In DirectCast(children.Item(New YamlScalarNode("items")), YamlSequenceNode)
            Dim item As New ItemData()
            item.id = DirectCast(itemNode.Item(New YamlScalarNode("id")), YamlScalarNode).Value
            item.name = DirectCast(itemNode.Item(New YamlScalarNode("name")), YamlScalarNode).Value
            items.Add(item)
            For Each subItemNode In DirectCast(itemNode.Item(New YamlScalarNode("subitems")), YamlSequenceNode)
                Dim subitem As New SubItemData()
                subitem.name = DirectCast(subItemNode.Item(New YamlScalarNode("name")), YamlScalarNode).Value
                item.subitems.Add(subitem)
            Next
        Next
    End Sub
End Class
次回記事:VisualBasic+WPF+YAML #3:DataGridへの表示
-- 以上 --
VisualBasic, WPF, YAML
 
0 件のコメント:
コメントを投稿