我正在尝试使用XmlSerializer将值写入xml值,下面是代码。将在下拉列表的选择更改时调用代码。所以它第一次工作正常但是对于第二个选择更改事件,它会像下面显示的xml一样插入垃圾值。
protected void UpdateDefaultReasonConfig(object sender, EventArgs e)
{
string configFile = ConfigurationSettings.AppSettings["DefaultOutageReasonConfig"];
DefaultOutageReason defaultOutageReason = new DefaultOutageReason();
defaultOutageReason.OutageReason = this._defaultOutageReason.Text;
XmlSerializer writer = new XmlSerializer(typeof(DefaultOutageReason));
using (FileStream write = File.OpenWrite(configFile))
{
writer.Serialize(write, defaultOutageReason);
}
}
结果xml是:
<?xml version="1.0"?>
<DefaultOutageReason xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<OutageReason>Storm Damage</OutageReason>
</DefaultOutageReason>eason>
所以请帮助我为什么将这个额外的值添加到根的结束标记。
答案 0 :(得分:8)
您需要File.Create
而不是File.OpenWrite
,因为它会覆盖旧文件,如果新文件更短,则会看到此垃圾。
答案 1 :(得分:2)
好像你正在写文件。它实际上并没有添加垃圾字符。这是因为以前创建的文件比当前文件冗长。
使用new FileStream(path, FileMode.Truncate);
摆脱这种情况。