3

XmlSerializer を使用して値を xml 値に書き込もうとしていますが、以下はコードです。このコードは、ドロップダウン リストの選択変更時に呼び出されます。したがって、最初は問題なく動作しますが、2 回目の選択変更イベントでは、以下に示す 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 に答える