アプリケーションに 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