尝试使用 yamldotnet 将 YAML 文件转换为哈希表
Trying to convert YAML file to hashtable using yamldotnet
现在我正在尝试将 YAML 文件转换为散列 table,利用 YamlDotNet 库中提供的反序列化器。收到错误 Excpected 'SequenceStart' got '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
为键),你可以改为写一个class:
public class MyClass {
public Dictionary<string, Dictionary<string, string>> Title { get; set; }
}
然后对此使用反序列化 class:
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);
}
}
现在我正在尝试将 YAML 文件转换为散列 table,利用 YamlDotNet 库中提供的反序列化器。收到错误 Excpected 'SequenceStart' got '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
为键),你可以改为写一个class:
public class MyClass {
public Dictionary<string, Dictionary<string, string>> Title { get; set; }
}
然后对此使用反序列化 class:
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);
}
}