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

时间:2014-12-23 15:50:14

标签: c# .net yaml yamldotnet

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

我没有找到合适的Deserialization方法重载 当然,我知道我可以手动处理YamlMappingNode,但Deserialization方法的简单性非常可爱,为每种类型编写一个Copy Constructor也不是一个选项。引入具有属性值的中间字典很难看。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分:0)

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

  

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