Сериализация детских классов в YamlDotNet

Я пытаюсь добавить сериализацию / десериализацию YAML в моем приложении. Моя структура классов такова, что несколько типов происходят от базового класса. Когда я пытаюсь сериализовать один из дочерних классов, создается впечатление, что 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

1 ответ

Решение

Похоже, проблема заключалась в том, что мой список в моем дочернем классе был свойством только для чтения, а сериализатор YAML не поддерживает это.

Другие вопросы по тегам