如何保留双引号+防止YAML输出中的奇怪数字

时间:2016-03-11 14:38:12

标签: c# yaml yamldotnet

我的应用正在加载和分析嵌套的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
  • 如何在使用Yaml.Save()?
  • 时保留输入文件中的双引号
  • 这个奇怪的数字& 1735269872是什么,以及如何防止在保存YAML时写入?在较长的文件中,其他数字会出现在不同的地方。
  • 是否可以保留评论,甚至可以在浏览YAML时更好地访问它们?

1 个答案:

答案 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功能,但我自己从未尝试过这个方向(只是相反)。