YamlDotNet
库是否支持Deserialization
现有对象而不是创建新对象?
我需要它,因为我的对象是通过Dependency Injection
创建的,所以当Deserialization
将所有属性填充(重写)到给定对象中时,我更喜欢这种方式。
我没有找到合适的Deserialization
方法重载
当然,我知道我可以手动处理YamlMappingNode
,但Deserialization
方法的简单性非常可爱,为每种类型编写一个Copy Constructor也不是一个选项。引入具有属性值的中间字典很难看。
另外,我认为这可能是非常需要的功能。
答案 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
,其描述为:
将接收其成员反序列化的对象实例(如果无法创建实例)。