YamlDotNet 库是否支持反序列化为现有对象?

本文关键字:对象 反序列化 是否 支持 YamlDotNet | 更新日期: 2023-09-27 18:35:17

YamlDotNet库是否支持Deserialization到现有对象中而不是创建新对象?
我需要它,因为我的对象是通过 Dependency Injection 创建的,所以我更喜欢将所有属性填充(重写)到给定对象Deserialization的方法。

我没有找到合适的Deserialization方法重载。
当然,我知道我可以手动处理YamlMappingNode但是Deserialization方法的简单性非常可爱,为每种类型编写复制构造函数也不是一种选择。引入具有属性值的中间字典是丑陋的。

另外,我认为这可能是非常需要的功能。

YamlDotNet 库是否支持反序列化为现有对象?

尽管 SharpYaml 有一个似乎支持反序列化的 ObjectContect.Instance,但它没有在任何公共接口中公开。它在内部用于反序列化内部元素。我已经分叉了 SharpYaml 以公开此功能,并允许更新内部对象的属性而不是完全重置对象。

分叉版本在 https://github.com/PeterDavidson/SharpYaml

我还提交了一个拉取请求;如果它被接受到主存储库中,那么我将删除分叉。

编辑:这现在包含在核心SharpYaml中,因此您现在可以使用

Deserialize<T>(TextReader reader, object existingObject=null)

请注意,这也将允许部分配置现有对象 - 将保留任何已具有值的属性,并且仅更改 yaml 文件中定义的那些属性。将添加任何列表属性。

SharpYaml 有一个属性ObjectContext.Instance描述为:

将接收其成员反序列化的对象实例(如果无法创建实例)。