这是有效的 Yaml 列表吗?如何让 YamlDotNet 读取它?

问题描述 投票:0回答:1

我有旧的 C++ 代码,它手动解析 YAML 并有大量的单元测试。我使用 YamlDotNet 将其转换为 C#。但旧代码的特点之一是它可以处理列表中的一些变化。例如,考虑以下列表...

images:
  - image01.png 
  - image02.png
  - image03.png

旧的解析代码可以处理“-”字符和项目之间没有空格的情况。所以它也可以毫无问题地读取这个。

images:
  - image01.png 
  -image02.png
  - image03.png

不幸的是 YamlDotNet 不解析这个。我正在转换专门验证这一点的单元测试,并且 YamlDotNet 抛出 YamlDotnet.Core.SemanticErrorException 并显示此消息

解析块集合时,没有找到预期的“-”指示符

但是如果我随后将空格放回到“-”和“image02.png”之间,它就会完美地读取 yaml。

所以我的问题是

  1. 这在技术上是有效的 YAML 吗?也就是说,上面的列表是否总是会导致错误?如果没有,我就去掉单元测试。
  2. 但是如果它有效的 YAML,是否有一个选项可以传递给 YamlDotNet 反序列化器来处理它?
c# yaml yamldotnet
1个回答
0
投票

- image01.png
(带空格)是字符串
image01.png
作为数组项。

-image02.png
只是字符串
-image02.png
(包括破折号),并且由于其在周围数组上下文中的错误位置而使您的文档无效。

所以,您的问题的答案是:不,它不是有效的 YAML。请参阅第 2.1 节下的 YAML 规范。收藏

块序列用破折号和空格表示每个条目(“

-

”)。

© www.soinside.com 2019 - 2024. All rights reserved.