c# - 尝试使用 yamldotnet 将 YAML 文件转换为哈希表

标签 c# yaml hashtable yamldotnet

现在我正在尝试利用 YamlDotNet 库中提供的反序列化器将 YAML 文件转换为哈希表。收到错误预期的“SequenceStart”得到“MappingStart”

var d = Deserializer();

var result = d.Deserialize<List<Hashtable>>(new StreamReader(*yaml path*));
foreach (var item in result)
{
    foreach (DictionaryEntry entry in item)
    {
        //print out using entry.Key and entry.Value and record
    }
}

YAML 文件结构如下所示

Title:

    Section1:
           Key1:    Value1
           Key2:    Value2
           Key3:    Value3

有时包含多个部分。

我尝试过类似的解决方案 Seeking guidance reading .yaml files with C#也是如此,但是会发生同样的错误。如何正确读取 YAML 文件,并使用 YamlDotNet 将其转换为哈希值?

最佳答案

您正在尝试将 YAML 输入反序列化为列表:

d.Deserialize<List<Hashtable>>
//            ^^^^

但是 YAML 文件中最上面的对象是一个映射(以 Title: 开头)。这就是您收到错误的原因。

您的结构有四个级别。顶层将字符串 (Title) 映射到第二层。第二层将字符串 (Section1) 映射到第三层。第三层将字符串 (Key1) 映射到字符串 (Value1)。

因此,您应该反序列化为:

Dictionary<string, Dictionary<string, Dictionary<string, string>>>

如果您最上面的对象始终只有一个键值对(以 Title 作为键),您可以编写一个类:

public class MyClass {
    public Dictionary<string, Dictionary<string, string>> Title { get; set; }
}

然后对这个类使用反序列化:

var result = d.Deserialize<MyClass>(new StreamReader(/* path */));
foreach (var section in result.Title) {
    Console.WriteLine("Section: " + section.Key);
    foreach (var pair in section.Value) {
        Console.WriteLine("  " + pair.Key + " = " + pair.Value);
    }
}

关于c# - 尝试使用 yamldotnet 将 YAML 文件转换为哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38339739/

相关文章:

c - IPv4/6 地址的快速哈希函数

c# - 为什么 ThreadPool.SetMinThreads 没有改变最小值?

c# - 当 POCO 文件位于单独的项目中时将 EF 指向数据库

yaml - swagger 编辑器中的多行字符串

yaml - YAML中的RMarkdown错误

javascript - nodeca/js-yaml 在长字符串上附加 >-

c# - 在 View 中使用 expando 对象?

C# 可变性 - VS 代码分析给我 CA2104?好像……可怜。我误会了吗?

c# - 为什么通过键 O(1) 访问字典的元素,即使哈希函数可能不是 O(1)?

c - 迭代时内核哈希表崩溃