c# - 将 YAML 反序列化为自定义类型

标签 c# yamldotnet

我目前正在尝试将 YAML 文档反序列化为标准 .NET 对象,例如 string对于标量值和 Dictionary<string, object>对于映射,使用 YamlDotNet 库。

我猜 Deserializer class 是最好的选择,但它的输出是 objectDictionary<object> .我尝试实现自定义 INodeTypeResolver像这样:

class MyNodeTypeResolver : INodeTypeResolver
{
    bool INodeTypeResolver.Resolve(NodeEvent nodeEvent, ref Type currentType)
    {
        if (currentType == typeof(object))
        {
            if (nodeEvent is SequenceStart)
                currentType = typeof(List<object>);
            else if (nodeEvent is MappingStart)
                currentType = typeof(Dictionary<string, object>);
            else if (nodeEvent is Scalar)
                currentType = typeof(string);

            return true;
        }

        return false;
    }
}

并像这样使用它:

Deserializer deserializer = new Deserializer();
deserializer.TypeResolvers.Add(new MyNodeTypeResolver());
var res = deserializer.Deserialize(input);

但这似乎没有任何效果。有什么办法可以改变 Deserializer 产生的对象类型吗? ?

最佳答案

您使用 INodeTypeResolver 走在正确的轨道上,但您需要构建和使用自定义反序列化器:

DeserializerBuilder deserializerBuilder = new DeserializerBuilder()
    .WithNodeTypeResolver(new MyNodeTypeResolver());
IDeserializer deserializer = deserializerBuilder.Build();
var res = deserializer.Deserialize(input);

关于c# - 将 YAML 反序列化为自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23181376/

相关文章:

c# - 如何使用 YamlDotNet 将 JSON 转换为 YAML

c# - YamlDotNet - 自定义序列化

c# - 如何使用 YamlDotNet 将 YAML 解析为派生集合?

c# - 从三角形的每一行中获取最大的数字并将其相加

c# - 如何将属性绑定(bind)到另一个类的属性(没有 UI 控件)?

c# - 如何将 cloudformation 模板 yaml 反序列化为 C# 字符串字典?

yamldotnet - 如何在 Yamldotnet 中跳过空集合

c# - 更改文件创建日期不起作用

c# - 分配新实例后 INotifyPropertyChanged 不起作用

c# - WPF 相当于 Form.ShowDialog(IWin32Window)