2

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

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

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

4

2 回答 2

1

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

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

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

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

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

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

于 2015-04-20T01:13:31.103 回答
0

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

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

于 2014-12-27T07:56:33.843 回答