YamlDotNet读取YAML文件时抛出YamlException怎么办
常见原因是缩进不一致(混用空格与Tab)、键名后缺少冒号、或注释位置非法。YamlDotNet默认严格遵循YAML 1.2规范,不接受松散格式。
实操建议:
- 用VS Code装
YAML插件实时校验语法,启用"yaml.format.enable": true - 读取前先用
File.ReadAllText(path)打印原始字符串,确认无BOM头或不可见控制字符 - 若YAML含中文键或值,确保文件保存为UTF-8无BOM格式
- 捕获
YamlException时检查e.Message和e.Start,它会指出具体行号和列偏移
如何用Deserializer.Deserialize映射嵌套结构
YamlDotNet的反序列化依赖属性名称与YAML键名**完全匹配**(区分大小写),且类需有公共setter或使用[YamlMember(Alias = "...")]显式指定别名。
示例YAML片段:
server: host: localhost port: 8080 logging: level: Debug file: app.log
对应C#类需这样定义:
public class Config
{
public ServerConfig server { get; set; }
public LoggingConfig logging { get; set; }
}
public class ServerConfig
{
public string host { get; set; }
public int port { get; set; }
}
public class LoggingConfig
{
public string level { get; set; }
public string file { get; set; }
}
关键点: