这是一个很蠢的问题,记录一下。
在用YamlDotNet的反序列化读取配置文件内容时,用到以下代码:
using(StreamReader sr = new StreamReader("./config.yaml", Encoding.Default))
{
string yamlStream, line;
yamlStream = "";
while ((line = sr.ReadLine()) != null)
{
yamlStream += line;
yamlStream += "\n";
}
var deserializer = new DeserializerBuilder().WithNamingConvention(PascalCaseNamingConvention.Instance).Build();
configure = deserializer.Deserialize<Configuration>(yamlStream);
}
其中,config.yaml的内容如下:
defaultLink: about:blank
defaultStatus: 已完成
formID: data-index
nextID: what
Configuration类定义跟config的内容一致,这里就不展示了。
然后,在执行到代码最后一句(给configure
赋值时)报错,提示如下:
找了好久才找到原因如下:
对于PascalCaseNamingConvention,要求变量名字按照驼峰法命名,否则反序列化时是无法识别的。将config.yaml改成如下内容即可:
DefaultLink: about:blank
DefaultStatus: 已完成
FormID: data-index
NextID: what
当然,如果就是想要小写变量名,可以使用LowerCaseNamingConvention
即可。