Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 使用XML序列化程序和TextWriter将节点追加到XML根节点_C#_Xml_Linq_Xmlserializer - Fatal编程技术网

C# 使用XML序列化程序和TextWriter将节点追加到XML根节点

C# 使用XML序列化程序和TextWriter将节点追加到XML根节点,c#,xml,linq,xmlserializer,C#,Xml,Linq,Xmlserializer,是否有任何方法可以使用XML序列化程序将数据附加到现有XML文档中。 我现在是这样做的 string filePath = "Data.xml"; var serializer = new XmlSerializer(typeof(Event)); extWriter writer = new StreamWriter(filePath, true); serializer.Serialize(writer, event); 这种方法像根节点而不是子节点一样添加元素……我也使用LINQ to

是否有任何方法可以使用XML序列化程序将数据附加到现有XML文档中。 我现在是这样做的

string filePath = "Data.xml";
var serializer = new XmlSerializer(typeof(Event));
extWriter writer = new StreamWriter(filePath, true);
serializer.Serialize(writer, event);
这种方法像根节点而不是子节点一样添加元素……我也使用LINQ to XML,这种方法工作得很好,但这种方法似乎是硬编码的。
是否有任何方法可以使用此方法实现此功能。

否,如果不加载文件,则无法对其进行操作。序列化程序始终处理整个文件

因此,正确的修改方法是将文件加载到内存中,修改它,然后再次保存


对于直接匿名Xml节点级操作,您应该使用XmlDocument.Load,而不是XmlSerializer。XmlSerializer首先将XML转换为自定义类。如果要添加自定义对象,这可能会更简单;如果要添加xml节点,最好使用XmlDocument。

如果现在数据位于文件末尾

您可以以文本形式打开文件 穷尽

删除最后一行

写下数据

然后再次添加最后一行


只有在写入大型统一文件时才建议这样做

不能使用XmlSerializer追加数据,如果要在XML文件中间添加节点,最好使用XDocument。它可能看起来像它的“硬编码”,但这是实现这一点的方法。正如@Holger所说,XmlSerializer首先将XML转换为自定义类。如果您需要将节点添加到现有的XML文件中,最好使用XmlDocument。

这看起来像是相关的解决方案吗?@pavel我目前使用linq的方式感觉有点硬编码,我正在寻找使用Serializer的解决方案。您无法附加到XML文件并获得“格式良好”的XML。“格式良好”的xml在根级别只有一个节点。要附加到xml并获得“格式良好”的xml,需要删除关闭节点。使用XMLLINQ允许添加到Xml的中间(而不是追加)。我不知道为什么您认为LINQXML解决方案是“硬编码的”。与硬编码类没有太大区别。