【问题标题】:How to apply custom converter to properties in YamlDotNet如何将自定义转换器应用于 YamlDotNet 中的属性
【发布时间】:2026-02-18 08:10:01
【问题描述】:

我正在将我的配置文件从 .json 移植到 .yaml 格式。在 Newtonsoft.Json 中,我能够将属性应用于需要自定义转换器的属性,例如

[JsonConverter(typeof(CustomIdConverter))]
public IList<CustomID> Users { get; set; }

我如何使用YamlDotNet 做同样的事情?

我知道转换器应该实现IYamlTypeConverter 接口,但我如何将此转换器应用于精确属性?

【问题讨论】:

    标签: c# deserialization yaml yamldotnet


    【解决方案1】:

    虽然这将是一个有用的功能,但不支持该功能。支持的是将转换器与类型相关联。作为一种解决方法,您可以为您的属性创建一个自定义类型并将转换器与其关联:

    public interface ICustomIDList : IList<CustomID> {}
    
    public class CustomIDListConverter : IYamlTypeConverter { /* ... */ }
    
    var deserializer = new DeserializerBuilder()
       .WithTypeConverter(new CustomIDListConverter())
       .Build();
    

    【讨论】:

    • 我已经打开了一个关于这个的问题 - github.com/aaubry/YamlDotNet/issues/233
    • 这个变通办法绝对有效,但我很想看到用属性属性实现它。它增加了对序列化的非常精细的控制,并且肯定会解决许多流行的用例(包括我的)。