yaml序列化注意事项
不能有特殊字符
如 %YAML:1.0
报错如下:
directives end mark is expected at line 3, column 1:
TmpFile: 0
^

其实真正的出错是 %YAML:1.0 ,将其修正为 YAML: 1.0 即可。
修正后如下图:

转义字符要特别注意
ImageOrientation: "1\0\0\0\1\0 "
如上这样,是会报错的;原因是为因为 \1 是特殊字符,详细可自行了解。
报错如下:
unknown escape sequence at line 70, column 28:
ImageOrientation: "1\0\0\0\1\0 "

修正后如下:

自行验证yaml链接:YAML、YML在线编辑器(格式化校验)-开发者工具
推荐操作
Yaml的操作最好是以对象来进行操作,而不是使用字符串匹配或正则表达式进行匹配。
以对象操作,可以校验相应字符串的正确性,并且能保证以yaml要求的写入规则进行写入,如此可避免由写入不规则造成读取时出现异常。
在C#开发中推荐使用YamlDotNet来进行相应的操作。
以下为以YamlDotNet更新Yaml数据,以键值对进行操作的示例,供参考。
public static void UpdateYamlValue(string yamlPath, Dictionary<string, object> keyValues) { if (File.Exists(yamlPath)) { string fileTxt = File.ReadAllText(yamlPath); var deserializer = new DeserializerBuilder() .WithNamingConvention(CamelCaseNamingConvention.Instance) .Build(); // Assuming the YAML deserializes to a Dictionary<string, object> var yamlData = deserializer.Deserialize<Dictionary<string, object>>(new StringReader(fileTxt)); foreach (var kv in keyValues) { yamlData[kv.Key] = kv.Value; } // Serialize back to YAML var serializer = new SerializerBuilder() .WithNamingConvention(CamelCaseNamingConvention.Instance) .Build(); string updatedYaml = serializer.Serialize(yamlData); // Write back to file File.WriteAllText(yamlPath, updatedYaml); } else { NlogHelper.Logger.Info(String.Format("{0}路径不存在!", yamlPath)); } }
YamlDotNet文档参考链接:Home · aaubry/YamlDotNet Wiki · GitHub
*****有道无术,术尚可求;有术无道,止于术。*****

浙公网安备 33010602011771号