2

同じxmlファイルにある必要がある2つのクラスがあります。クラスが行われる方法は、個別にシリアル化する必要があることを意味します。私がなんとかしたこと。最初に TextWriter を使用します。

TextWriter writer = new StreamWriter(filepath);
serializer.Serialize(writer, class, ns);

これはうまくいきます。次に、別のクラスをファイルに追加したいと思いました。同じことをしましたが、上書きではなく追加したいことを追加しました。

TextWriter writer = new StreamWriter(filepath, true);

これにより、新しいクラスが最後に追加されますが、別の宣言も追加されるため、XML ファイルが読み取られます。

<?xml version="1.0" encoding"utf-8"?>
<dog>
...
</dog>
<?xml version="1.0" encoding"utf-8"?>
<cat>
...
</cat>

XmlWriter を使用しようとしたので、XmlWriterSettings を使用してから、OmitXmlDeclaration に false を選択しましたが、シリアル化した前のクラスをオーバーライドします。

4

2 に答える 2

1

XML が有効な XML であるためには、ルート要素が必要です。

<?xml version="1.0" encoding"utf-8"?>
<animals>
    <dog/>
    <cat/>
<animals>

を作成しList<Animal>てシリアル化できます。ただし、同じスーパークラスがない場合は、次のようなクラスを作成してみてください。

[Serializable]
public class AnimalCollection : IXmlSerializable
{
    public void WriteXml(XmlWriter writer)
    {
        // Repeat for the Cat
        writer.WriteStartElement("Dog");

        XmlSerializer serializer = new XmlSerializer(TypeOf(Dog));
        using (StringWriter stringWriter = new StringWriter())
            {
                serializer.Serialize(stringWriter, _dog);
                string value = stringWriter.ToString();
                writer.WriteRaw(value);
            }

        writer.WriteEndElement();
    }
}

で、ReadXmlジェネリックWriteXmlシリアライザーを使用してこれらのオブジェクトをシリアル化し、XmlWriter を使用して startElement を書き込むことができます。endElement を使用して、シリアル化された動物を含めます。

于 2012-06-11T13:06:52.990 に答える
0

あなたがしたいことは、単一のルート要素しか含めることができないため、有効な XML ではありません。

dogandを含むクラスを作成しcat、それをシリアル化できます。

于 2012-06-11T13:07:00.920 に答える