Vb.net YamlDotNet-Guid属性的序列化生成空括号
我正在使用YamlDotNet库序列化Yaml中的一些对象。我在Guid属性的序列化方面遇到了一些问题。 Guid属性的序列化生成空括号(例如:{}) 请参阅下面的代码Vb.net YamlDotNet-Guid属性的序列化生成空括号,vb.net,yaml,yamldotnet,Vb.net,Yaml,Yamldotnet,我正在使用YamlDotNet库序列化Yaml中的一些对象。我在Guid属性的序列化方面遇到了一些问题。 Guid属性的序列化生成空括号(例如:{}) 请参阅下面的代码 Dim l As New List(Of Person) l.Add(New Person() With {.Firstname = "MyFirstName", .Lastname = "MyLastName", .Id = Guid.NewGuid()}) Using sw As New StreamWriter("out
Dim l As New List(Of Person)
l.Add(New Person() With {.Firstname = "MyFirstName", .Lastname = "MyLastName", .Id = Guid.NewGuid()})
Using sw As New StreamWriter("output.yaml", False)
Dim serializer = New Serializer()
serializer.Serialize(sw, l)
End Using
此代码将输出:
- Id: {}
Firstname: MyFirstName
Lastname: MyLastName
在课堂上:
Public Class Person
Public Property Id As Guid
Public Property Frstname As String
Public Property Lastname As String
End Class
我是否遗漏了什么,或者这是库的问题?您可以定义自定义转换器,以便在需要自定义类型序列化时使用。转换器需要实现,并在
序列化程序
或反序列化程序
上注册。以下是此类转换器的示例:
Public Class GuidConverter
Implements IYamlTypeConverter
Public Function Accepts(type As Type) As Boolean Implements IYamlTypeConverter.Accepts
Return type = GetType(Guid)
End Function
Public Function ReadYaml(parser As IParser, type As Type) As Object Implements IYamlTypeConverter.ReadYaml
Dim reader = New EventReader(parser)
Dim scalar = reader.Expect(Of Scalar)()
Return Guid.Parse(scalar.Value)
End Function
Public Sub WriteYaml(emitter As IEmitter, value As Object, type As Type) Implements IYamlTypeConverter.WriteYaml
emitter.Emit(New Scalar(value.ToString()))
End Sub
End Class
用法非常简单:
Dim serializer = New Serializer()
serializer.RegisterTypeConverter(New GuidConverter())
serializer.Serialize(Console.Out, New With {.id = Guid.NewGuid()})
您可以看到。库问题没有为YAML中不支持的类型引发异常。因此YamlDotNet序列化/反序列化不支持Guid类型?我希望库输出类似于{1234564-1232132-21321}的内容,然后可以轻松地将此字符串解析为system.guid…guid类型本机不受支持,但添加支持并不重要。请参阅我的答案。对于这个示例,反序列化将如何工作?试图将输出反序列化为Guid时抛出异常: