C# 如何保存双引号+;防止YAML输出中出现奇怪的数字

C# 如何保存双引号+;防止YAML输出中出现奇怪的数字,c#,yaml,yamldotnet,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

我的应用程序正在加载和分析一个嵌套的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时,是否可以保留评论,甚至可以更好地访问它们
这个“怪异”数字是一个标准YAML,通常只有递归数据引用才需要它。唯一奇怪的是,为什么您的C#YAML库将它插入到这里,因为没有对应的别名指向它。这可能是因为文件中稍后出现的键
ti
,而没有实际的节点别名来引用锚定,因此将其混淆,
&1735269872
是完全多余的

YAML规范明确规定:

评论是演示细节,不得用于传达内容信息

我所知道的所有库,除了我的
ruamel.yaml
(对于Python),都会丢弃文件中的注释,这是更容易做到的事情(如果注释出现在文件的开头,有些库会保留注释)

但是,即使使用ruamel.yaml来往返输入yaml,也不会在输入中的值标量周围保留不必要的引号,并标准化字符串的输出。自版本3.6.0以来,yamldotnet支持设置通过YamlMember属性指定的标量属性,但我找不到示例但是,使用它也很可能会影响标量键。在标量周围不一致地使用引号需要在单个字符串的基础上保留引号知识

也许你应该问问自己,这种不一致性会让你在清晰度上失去什么,并在输入中的任何地方都接受不带引号的字符串标量,而不仅仅是在某些地方

ruamel.yaml
如果您可以从C#程序调用它的Python功能,可能会对您有所帮助,但我自己从未尝试过这个方向(只有相反的方向)。

那“奇怪”数字是一个标准的YAML,通常只有递归数据引用才需要它。唯一奇怪的是为什么您的C#YAML库将它插入这里,因为没有指向它的对应别名。可能是因为文件中稍后出现了键
ti
,但没有实际的节点a,所以它会被混淆lias指的是
&1735269872
完全多余的锚

YAML规范明确规定:

评论是演示细节,不得用于传达内容信息

我所知道的所有库,除了我的
ruamel.yaml
(对于Python),都会丢弃文件中的注释,这是更容易做到的事情(如果注释出现在文件的开头,有些库会保留注释)

但是,即使使用ruamel.yaml来往返输入yaml,也不会在输入中的值标量周围保留不必要的引号,并标准化字符串的输出。自版本3.6.0以来,yamldotnet支持设置通过YamlMember属性指定的标量属性,但我找不到示例但是,使用它也很可能会影响标量键。在标量周围不一致地使用引号需要在单个字符串的基础上保留引号知识

也许你应该问问自己,这种不一致性会让你在清晰度上失去什么,并在输入中的任何地方都接受不带引号的字符串标量,而不仅仅是在某些地方


ruamel.yaml
如果您可以从C#程序调用它的Python功能,可能会对您有所帮助,但我自己从未尝试过这个方向(只有相反的方法).

谢谢你的宝贵意见。我认为这将有助于解释那些抱怨不同输出YAML文件格式的应用程序用户,他们认为该文件仍然符合YAML标准。但是锚仍然很奇怪,不应该出现。我完全同意锚很奇怪。我试图查看源代码,但尽管yamldotnet和我的ruamel.yaml的结构相似,我的C#流利度不够大,无法理解在哪里(更不用说为什么了)发射器决定插入锚。也许yamldotnet作者可以透露更多信息,他经常在这里,但不是最近一周半。感谢你的有用评论。我认为这将有助于解释那些抱怨不同输出YAML文件格式的应用程序用户,该文件仍然符合YAML标准。但锚还是很奇怪,不应该出现。我完全同意锚是奇怪的。我试着查看源代码,但尽管yamldotnet和我的ruamel.yaml的结构相似,但我的C#流利程度还不足以理解在哪里(更不用说为什么了)发射器决定插入锚。也许yamldotnet的作者可以透露更多的信息,他定期在这里,但不是最近一周半。