我今天早上有一个xml错误,当我去看时,我发现了一个看起来像这样的xml:
<root>
<list />
<root> var </item>
<item> var </item>
</list>
</root>
这显然是错误的。
代码中唯一可以执行此操作的行如下:
XmlSerializer.Serialize(fileStream, thisObject);
我怀疑是它试图用<list><item>var</item></list>
更新<list />
,然后卡在第一个元素上,因为它会立即关闭它。
有没有人知道序列化函数在这个例子中应该如何表现?
编辑:我写了一些代码来重新创建问题:using System;
using System.Collections.Generic;
using System.IO;
namespace XMLserializetest
{
public class sample
{
public DateTime LastRun { get; set; }
public List<int> intlist { get; set; }
}
class Program
{
static void Main(string[] args)
{
const string FileName = "c:\\temp\\list.xml";
var file = new FileStream(FileName, FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);
try
{
var test = new sample();
test.LastRun = DateTime.Now;
test.intlist = new List<int>();
/*Comment this line and run again, then look at the xml*/
test.intlist.Add(1); test.intlist.Add(2); test.intlist.Add(3); test.intlist.Add(4);
var x = new System.Xml.Serialization.XmlSerializer(test.GetType());
x.Serialize(file, test);
}
catch (Exception e)
{
var a = e;
}
finally
{
file.Close();
}
}
}
}
答案 0 :(得分:1)
您应该使用StreamWriter,以便流知道他不需要追加:
var file = new StreamWriter(FileName);
对于此示例,您应首先在写入之前检查文件是否存在。
答案 1 :(得分:0)
我在加载流之前添加了这一行:
File.WriteAllText(FileName, string.Empty);
这会清空文件,因此序列化方法中没有混淆,一切顺利。