0

既存の XML ファイル内の 1 つのブランチのみに対してオブジェクトのシリアル化を実行したいと考えています。以下を使用して読んでいる間:

        RiskConfiguration AnObject;

        XmlSerializer Xml_Serializer = new XmlSerializer(typeof(RiskConfiguration));
        XmlTextReader XmlReader = new XmlTextReader(@"d:\Projects\RiskService\WCFRiskService\Web.config");
        XmlReader.ReadToDescendant("RiskConfiguration");
        try
        {
            AnObject = (RiskConfiguration)Xml_Serializer.Deserialize(XmlReader);
            AnObject.Databases.Database[0].name = "NewName";
        }
        finally
        {
            XmlReader.Close();
        }

オブジェクトを再度編集する方法がわかりませんが、XML ファイル内の他の既存の要素を消去せずにファイルを保存できます。誰でも私を助けることができますか?

目的のアイテムのシリアル番号を表示する方法を見つけました。XML の元の要素に貼り付ける代わりに、どうすればよいですか?

        StringWriter wr = new StringWriter();
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.Indent = true;
        settings.OmitXmlDeclaration = true;
        settings.Encoding = System.Text.Encoding.Default;

        using (XmlWriter writer = XmlWriter.Create(wr, settings))
        {
            XmlSerializerNamespaces emptyNamespace = new XmlSerializerNamespaces();
            emptyNamespace.Add(String.Empty, String.Empty);
            Xml_Serializer.Serialize(writer, AnObject, emptyNamespace);
            MessageBox.Show(wr.ToString());
        }
4

1 に答える 1

2

まず、の使用をやめる必要がありますnew XmlTextReader()。これは、.NET2.0以降非推奨になっています。XmlReader.Create()代わりに使用してください。

第二に、XMLはランダムアクセス媒体ではありません。ファイルの途中に書き込んで、前後に移動することはできません。これはテキストベースのファイルです。

ファイルを「変更」する必要がある場合は、ファイルの新しいバージョンを作成する必要があります。デシリアライズが必要になるまで、元のファイルから読み取り、ノードをファイルの新しいバージョンに書き出すことができます。次に、元のファイルから逆シリアル化し、オブジェクトを変更して、新しいバージョンにシリアル化することができます。その後、元のバージョンから読み取りを続行し、ノードを新しいバージョンに書き出すことができます。

于 2013-02-06T14:57:48.423 に答える