为什么内容没有写入yaml文件?
Why isn't content written to yaml document?
我的意图是在yaml文件中写一个Items数组,格式应该是这样的:
- country: Denmark
city: Copenhagen
- country: Italy
city: Rome
所以我写了这个方法:
public static void Write(MyItem myItem)
{
var myFilePath = "myYamlDoc.yaml";
var yamlStream = new YamlStream();
var yamlNode = new YamlMappingNode
{
{ "country", new YamlScalarNode(myItem.Country) { Style = ScalarStyle.Literal }},
{ "city", new YamlScalarNode(myItem.City) { Style = ScalarStyle.Literal }};
var yamlDocument = new YamlDocument(yamlNode);
yamlStream.Add(yamlDocument);
}
没有错误,但内容也不是 written/saved yaml 文档...
有帮助吗?
稍后编辑:
public static void Write4()
{
var myFilePath = "myFile3.yaml";
var items = new MyItem[]
{
new MyItem()
{
Prop1= "A4786",
Prop2 = "Water Bucket (Filled)",
Prop3 = "X"
},
new MyItem()
{
Prop1= "A4786",
Prop2 = "Water Bucket (Filled)",
Prop3 = "X"
}
};
var serializer = new SerializerBuilder().Build();
var yamlText = serializer.Serialize(items);
var yamlStream = new YamlStream();
using (StreamWriter writer = System.IO.File.Exists(myFilePath) ? System.IO.File.AppendText(myFilePath) : System.IO.File.CreateText(myFilePath))
{
writer.WriteLine(yamlText);
yamlStream.Save(writer, false);
}
}
像这样工作,但你认为这是正确的方法吗?在图书馆他们使用发射器?对于保存,但缺少文档或至少我没有找到它。我可以使用更好的 yaml 库吗?为什么不直接写入 yamlStream,我的意思是为什么要使用 StreamWriter?
我假设您使用的 YamlDotnet. The class called YamlStream,并不是真正的 .NET 流(它不继承 Stream
)。它更像是一个 YamlDocumentCollection。
因此它永远不会将文档保存到某个地方。
如果您查看第一个代码示例,您将永远不会使用文件名,因此该文件永远不会保存到磁盘。
在您的第二个示例中,它可以工作,因为“YamlStream”可以采用 TextWriter
派生的 class(在您的情况下为 StreamWriter
)并使用它来将内容保存到磁盘.
不过我会把代码写成:
using (var fileStream = new FileStream(myFilePath, FileMode.Append, FileAccess.Write))
{
using (StreamWriter writer = new StreamWriter(fileStream))
{
writer.WriteLine(yamlText);
yamlStream.Save(writer, false);
}
}
因为它使意图更加清晰(始终附加到文件)。否则只需使用 FileMode.Create
始终覆盖文件(如果存在)。
我的意图是在yaml文件中写一个Items数组,格式应该是这样的:
- country: Denmark
city: Copenhagen
- country: Italy
city: Rome
所以我写了这个方法:
public static void Write(MyItem myItem)
{
var myFilePath = "myYamlDoc.yaml";
var yamlStream = new YamlStream();
var yamlNode = new YamlMappingNode
{
{ "country", new YamlScalarNode(myItem.Country) { Style = ScalarStyle.Literal }},
{ "city", new YamlScalarNode(myItem.City) { Style = ScalarStyle.Literal }};
var yamlDocument = new YamlDocument(yamlNode);
yamlStream.Add(yamlDocument);
}
没有错误,但内容也不是 written/saved yaml 文档... 有帮助吗?
稍后编辑:
public static void Write4()
{
var myFilePath = "myFile3.yaml";
var items = new MyItem[]
{
new MyItem()
{
Prop1= "A4786",
Prop2 = "Water Bucket (Filled)",
Prop3 = "X"
},
new MyItem()
{
Prop1= "A4786",
Prop2 = "Water Bucket (Filled)",
Prop3 = "X"
}
};
var serializer = new SerializerBuilder().Build();
var yamlText = serializer.Serialize(items);
var yamlStream = new YamlStream();
using (StreamWriter writer = System.IO.File.Exists(myFilePath) ? System.IO.File.AppendText(myFilePath) : System.IO.File.CreateText(myFilePath))
{
writer.WriteLine(yamlText);
yamlStream.Save(writer, false);
}
}
像这样工作,但你认为这是正确的方法吗?在图书馆他们使用发射器?对于保存,但缺少文档或至少我没有找到它。我可以使用更好的 yaml 库吗?为什么不直接写入 yamlStream,我的意思是为什么要使用 StreamWriter?
我假设您使用的 YamlDotnet. The class called YamlStream,并不是真正的 .NET 流(它不继承 Stream
)。它更像是一个 YamlDocumentCollection。
因此它永远不会将文档保存到某个地方。
如果您查看第一个代码示例,您将永远不会使用文件名,因此该文件永远不会保存到磁盘。
在您的第二个示例中,它可以工作,因为“YamlStream”可以采用 TextWriter
派生的 class(在您的情况下为 StreamWriter
)并使用它来将内容保存到磁盘.
不过我会把代码写成:
using (var fileStream = new FileStream(myFilePath, FileMode.Append, FileAccess.Write))
{
using (StreamWriter writer = new StreamWriter(fileStream))
{
writer.WriteLine(yamlText);
yamlStream.Save(writer, false);
}
}
因为它使意图更加清晰(始终附加到文件)。否则只需使用 FileMode.Create
始终覆盖文件(如果存在)。