Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# YamlDotNet库是否支持文档分隔符?_C#_.net_Yaml_Yamldotnet - Fatal编程技术网

C# YamlDotNet库是否支持文档分隔符?

C# YamlDotNet库是否支持文档分隔符?,c#,.net,yaml,yamldotnet,C#,.net,Yaml,Yamldotnet,此YAML文件: --- - Prisoner - Goblet - Phoenix --- - Memoirs - Snow - Ghost 正在通过以下代码进行反序列化: var input = new StreamReader (path) var deserializer = new Deserializer(); var lis = deserializer.Deserialize <List <string>> (input); 更新1:SharpYam

YAML
文件:

---
- Prisoner
- Goblet
- Phoenix
---
- Memoirs
- Snow 
- Ghost
正在通过以下代码进行反序列化:

var input = new StreamReader (path)
var deserializer = new Deserializer();
var lis = deserializer.Deserialize <List <string>> (input);
更新1:SharpYaml:相同的异常

更新2: @DarrelMiller:是的,从我的第一个示例看不清楚,但在第二个示例中可以看到文档分隔符的需要:

---
- Prisoner
- Goblet
- Phoenix
---
- Memoirs: [213, 2004]
- Snow: [521, 2011] 
- Ghost: [211, 2002]
因此,我需要使用分隔符来更改
反序列化器的类型


@AntoineAubry:谢谢你的回答和YamlDotNet,我都喜欢。

你可以轻松地反序列化多个文档。为此,您需要使用:

public void Main()
{
var输入=新的StringReader(文档);
var反序列化器=新的反序列化器();
var reader=新解析器(输入);
//“手动”使用流启动事件
reader.Consume();
//反序列化第一个文档
var firstSet=反序列化程序。反序列化(读取器);
Console.WriteLine(“第一个文档”);
foreach(第一集中的变量项)
{
控制台写入线(项目);
}
//反序列化第二个文档
var secondSet=反序列化程序。反序列化(读取器);
Console.WriteLine(“第二个文档”);
foreach(第二集中的var项目)
{
控制台写入线(项目);
}   
}

您甚至可以使用循环读取任意数量的文档:

while(reader.Accept<DocumentStart>())
{
    // Deserialize the document
    var doc = deserializer.Deserialize<List<string>>(reader);

    Console.WriteLine("## Document");
    foreach(var item in doc)
    {
        Console.WriteLine(item);
    }
}
while(reader.Accept())
{
//反序列化文档
var doc=反序列化器。反序列化(读取器);
Console.WriteLine(“文档”);
foreach(单据中的var项目)
{
控制台写入线(项目);
}
}

尝试删除第5行中“--”的第二个实例。它确实支持使用YamlStream类的多个文档。但是,我怀疑反序列化程序只需要一个文档。您的问题不清楚您试图用两个文档实现什么。您是否可以将其更新为working post 4.0版本?完成,但您是否尝试运行该代码?我只需删除
EventReader
部分。
public void Main()
{
    var input = new StringReader(Document);

    var deserializer = new Deserializer();

    var reader = new Parser(input);

    // Consume the stream start event "manually"
    reader.Consume<StreamStart>();

    // Deserialize the first document
    var firstSet = deserializer.Deserialize<List<string>>(reader);

    Console.WriteLine("## First document");
    foreach(var item in firstSet)
    {
        Console.WriteLine(item);
    }

    // Deserialize the second document
    var secondSet = deserializer.Deserialize<List<string>>(reader);

    Console.WriteLine("## Second document");
    foreach(var item in secondSet)
    {
        Console.WriteLine(item);
    }   
}
while(reader.Accept<DocumentStart>())
{
    // Deserialize the document
    var doc = deserializer.Deserialize<List<string>>(reader);

    Console.WriteLine("## Document");
    foreach(var item in doc)
    {
        Console.WriteLine(item);
    }
}