0

アプリケーションに YAML シリアライズ/デシリアライズを追加しようとしています。私のクラス構造は、いくつかの型が基本クラスから派生するようなものです。子クラスの 1 つをシリアル化しようとすると、YamlDotNet に子クラスに固有のプロパティが含まれていないように見えます。簡単な例として:

Public Class BaseGrammar
    <YamlIgnore>
    Public Property FilePath As String

    Public Overridable Property Name As String
    Public Overridable Property Author As String
    Public Overridable Property Description As String
    Public Overridable Property Tags As BindingList(Of String)
End Class

Public Class AssignmentGrammar
    Inherits BaseGrammar

    Private _items As BindingList(Of  Item)

    Public ReadOnly Property Items As BindingList(Of Item)
    Get
        Return _items
    End Get
End Class

Public Class Item
    Public Property Name As String
    Public Property Value As String
End Class

次のコードを使用してシリアル化します。

Public Shared Sub ConvertXMLToYAML(ByVal sourcefileName As String,
                                   ByVal targetFileName As String)
    Dim grammar As BaseGrammar = OpenXML(sourcefileName)
    Dim serializer As New YamlDotNet.Serialization.Serializer(YamlDotNet.Serialization.SerializationOptions.Roundtrip)
    Using output As IO.TextWriter = IO.File.CreateText(targetFileName)
        serializer.Serialize(output, grammar)
    End Using
End Sub

次の YAML を生成します。

!Grammars.Assignment.AssignmentGrammar,%20Grammars,%20Version=1.0.0.1,%20Culture=neutral,%20PublicKeyToken=null
Name: Urban Gangs
Author: Lance Boudreaux
Description: Generates gangs for urban adventures.
Tags:
- Gang
- Encounter
4

1 に答える 1

0

問題は、子クラスのリストが読み取り専用プロパティであり、YAML シリアライザーがこれをサポートしていないことだったようです。

于 2015-09-21T16:31:13.227 に答える