我的应用正在加载和分析嵌套的YAML文件,使用RepresentationModel提取每个单个键/值对。一些值将被更改,然后我回写YAML文件。输入文件是:
account:
menu:
dev: "Device Settings" # Item comment 1
port: "Portal Accounts"
prof: "Personal Information"
ports:
# Comment line
desc: "Below is a list of available portals. You can use the sections below to manage each portal account."
det: "Manage Accounts"
no_enabled: "No portals are currently enabled."
ti: "Account Access"
pro:
ti: Information
但输出文件看起来像
account:
menu:
dev: Device Settings changed
port: Portal Accounts changed
prof: Personal Information changed
ports:
desc: Below is a list of available portals. You can use the sections below to manage each portal account. changed
det: Manage Accounts changed
no_enabled: No portals are currently enabled.
&1735269872 ti: Account Access
pro:
ti: Information
答案 0 :(得分:0)
那"怪异的" number是标准的YAML anchor,通常只对递归数据引用有用。唯一奇怪的是它为什么你的C#YAML库在这里插入它,因为没有相应的别名指向它。它可能会因为文件中稍后出现的键ti
而混淆,但没有实际的节点别名来引用&1735269872
完全多余的锚。
YAML规范明确指出
评论是演示文稿的详细信息,不得用于传达内容信息
我所知道的所有库,除了我的ruamel.yaml
(对于Python),都会丢弃文件中的注释,这是更容易做的事情(如果注释发生在文件的开头,有些会保留注释) 。
但即使是用于往返输入YAML的ruamel.yaml也不会在输入中的值标量周围保留不必要的引号,并标准化字符串的输出。 yamldotnet支持设置自版本3.6.0以来通过YamlMember属性指定的标量属性,但我找不到如何完成的示例。但是,使用它很可能也会影响标量键。您在标量周围不一致地使用引号将需要保留基于单个字符串的引用知识。
也许你应该问自己这种不一致在清晰度上失去了什么,并且不仅在我们输入的某些地方接受任何地方的非引用字符串标量。
ruamel.yaml
可以帮助你,如果你可以从你的C#程序调用它的Python功能,但我自己从未尝试过这个方向(只是相反)。