问题标签 [yamldotnet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
905 浏览

yamldotnet - 是否可以禁止 YAML 文件中的重复项?

我正在使用 YamlDotNet 来解析简单的配置文件(没有深度嵌套等)。反序列化器将解析包含重复字段的字符串,覆盖之前的值。例如,

被认为等同于

对于我的应用程序,我希望这样的重复会导致抛出异常。这可能吗?

0 投票
3 回答
7075 浏览

c# - 反序列化 YAML 数据“表”

我正在使用 yamldotnet 和 c# 反序列化由第三方软件应用程序创建的文件。以下 YAML 文件示例在应用程序中均有效:

请注意,File2 没有任何 Age 列,但反序列化器仍必须识别每行上的第三个值是高度而不是年龄。这个数据应该代表一张人的桌子。以 File1 为例,Mary Ryan 20 岁,身高 169 厘米。反序列化器需要了解它拥有的列(对于 File2,它只有 FirstName、LastName 和 Height)并将数据相应地存储在正确的对象中:Mary Ryan 身高 169 厘米。

同样,程序文档指出列的顺序并不重要,因此下面的 File3 是一种同样有效的方式来表示 File2 中的数据,即使现在首先是高度:

我有几个问题:

  1. 这是标准的 YAML 吗?- 我找不到任何关于在同一行上使用多个键后跟冒号和值列表来表示数据表的任何信息。
  2. 我将如何使用 yamldotnet 反序列化它?我可以做些修改来帮助它吗?
  3. 如果我不能使用 yamldotnet,我该怎么办?
0 投票
1 回答
557 浏览

c# - 使用 YamlDotNet 设置单打值

我是 YAML、YamlDotNet 的新手,对 C# 不是很有经验。今天我创建了一个小应用程序,它正在加载和分析一个嵌套的 YAML 文件,使用 RepresentationModel 提取每个单独的键/值对。一切正常。

在处理结构时,我想更改一些 Value 属性,最后我想将更改后的 YAML 结构保存到另一个文件中。

如何更改单个值属性?这似乎是不可能的。entry.Value 是只读的?!

还有一些我不知道如何解决的附加要求: - 我可以在解析时访问存储在 YAML 结构中的注释吗?- 保存更改的结构时,如何保留注释和缩进,以便与原始文件进行比较?

任何反馈都非常感谢。非常感谢哈尼巴尼

0 投票
2 回答
299 浏览

c# - 如何反序列化不可变的数据结构?

我如何将 YAML 反序列化为不可变的数据结构?

例如我有这个 YAML:

而这个数据结构:

为此,我将使用构造函数。所以不知何故,我需要首先Dictionary<string, object>从 YAML 中检索一个关于我的类的解析(所以 99 将是 int,而不是字符串),然后扫描我的类型以寻找合适的构造函数,

0 投票
1 回答
268 浏览

yamldotnet - YamlDotNet.RepresentationModel 中的数值

如何从 RepresentationModel 获取数值?

说,在遍历一个文档后,我有一个YamlScalarNode. 它有一个string Value,我当然可以尝试将其转换为数字,但我希望 YAML 能够检测到类型并将其呈现为intdouble(也许通过来自 的后代YamlScalarNode,我可以检测到其类型)。

有没有我想念的官方方法?

请注意,我不能使用Serialization:文档结构不直接映射到类;它可以是任意深度的递归定义,最终值可以是标量数,也可以是数字序列(向量)。

另外,YamlDotNet 可以处理映射中的数字键吗?这意味着密钥 1 和 01 应被视为重复项。我相信 YAML 规范要求这样做,但我不确定......

0 投票
1 回答
412 浏览

.net - 在 YamlDotNet 中序列化子类

我正在尝试在我的应用程序中添加 YAML 序列化/反序列化。我的类结构是从一个基类派生的几种类型。当我尝试序列化其中一个子类时,似乎 YamlDotNet 不包含特定于子类的属性。作为一个简化的例子:

使用以下代码进行序列化:

产生以下 YAML:

0 投票
1 回答
171 浏览

snakeyaml - 使用 snakeyaml (Java) 和 YamlDotNet (C#) 处理从 Java 到 C# 的 Double.NaN

我正在使用 YAML 在 C# GUI 和服务器端 Java 之间进行通信,这通常工作正常。但是,如果我在 Java 端传递一个 Double 字段并且值为 Double.NaN,则 Yaml 将作为“.NaN”传递,并且当我在 C# 端反序列化时,会抛出一个“System.FormatException”作为 C#期望字符串“NaN”[不是“.NaN”]。

有谁知道是否有办法拦截反序列化器,或者添加格式以便在 C# 端“.NaN”可以解析为双精度?

(我能想到的一种解决方法是在序列化为 YAML 之前将所有 NaN 更改为特殊值,然后在 C# 上识别特殊值并转换回 NaN,但这似乎是一个大技巧。)

0 投票
1 回答
1207 浏览

java - YamlDotNet:如何处理 !!set

我正在尝试反序列化一些在序列化 Java HashSet 时在由 SnakeYaml 创建的字符串中设置的 YAML。不同的泛型类型被序列化,例如 HashSet 和自定义类型 HashSet。

示例 YAML:

我最初得到异常:

附加信息:无法加载文件或程序集“2002:set”或其依赖项之一。该系统找不到指定的文件。

为了解决这个问题,我将标签映射注册到反序列化器:

然后我得到异常:

YamlDotNet.dll 中出现“YamlDotNet.Core.YamlException”类型的第一次机会异常附加信息:(行:4,列:23,idx:108)-(行:5,列:9,idx:122):预期'SequenceStart',得到'MappingStart'(第 4 行,第 23 列,第 108 行)。

我原以为处理集是 YAML 的一个非常常见的要求,但我不知道如何解决这个问题。

任何人都可以建议如何处理?

0 投票
1 回答
388 浏览

yamldotnet - 如何在 YamlDotNet 的标签中使用命名空间和类名

我正在尝试使用 SnakeYaml 将具有嵌套字典属性的对象从 C# (YamlDotNet) 序列化到 Java,以便在服务器端进行反序列化。奇怪的是,这与以下形式的属性一起工作得很好:

但是对于另一个对象,当有额外的嵌套层时:

类 InstrumentId 不再序列化为对象。Intead 创建了一个 LinkedHashMap。

为了解决这个问题,我认为 YamlDotNet 上的以下选项可以用于序列化程序:

然后,这包括有关类型的信息,我希望在 Java 端在标记映射中使用它来创建适当的对象,而不是获取 LinkedHashMap。

创建的标签不仅包括命名空间和类名,还包括关于汇编的所有信息,例如版本切割、公钥令牌等。

例如,从 Java 到 C#,可能会创建以下标记:

但是从 C# 到 Java,创建了以下内容:

有没有办法显示简洁的标签映射?

从 Java 到 C#,顶级 Yaml 给出了键和值,但没有提到 HashMap:

从 C# 到 Java,提供了有关 Dictionary 和泛型类型的完整信息:

有人可以建议如何以更简洁的方式进行序列化,例如 SnakeYaml,因为这将更容易在 Java 端确定适当的标记映射?

特别是,没有关于 Dictionary 的信息会很有用,因为我认为这不是必需的 - YAML 语法应该涵盖键值关系。

0 投票
1 回答
218 浏览

yamldotnet - 如何反序列化子类?

我有一个列表,其中包含相同基类但不同子类的项目。我怎样才能反序列化这个?

例如

谢谢