3

我正在尝试使用 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>

所以请帮助我为什么将这个额外的值添加到根的结束标记。

4

2 回答 2

8

你需要File.Create代替,File.OpenWrite因为它会覆盖旧文件,如果新文件更短,你会看到这个垃圾。

于 2013-09-03T19:43:03.217 回答
2

看来你已经写完了文件。它实际上并没有添加垃圾字符。这是因为以前创建的文件比当前文件长。

用来new FileStream(path, FileMode.Truncate);摆脱这个。

于 2013-09-03T19:44:37.580 回答