0

XML シリアル化を使用して、Word 型のオブジェクトのリストをシリアル化することができました。

public static void WriteXML(string fileName)
{     
    System.Xml.Serialization.XmlSerializer writer =
        new System.Xml.Serialization.XmlSerializer(typeof(Word));
    System.IO.StreamWriter file = new System.IO.StreamWriter(
        fileName);
    foreach (var word in Words)
    {
        writer.Serialize(file, word);
    }
    file.Close();
}

このリストのデシリアライズに問題があります。このコード スニペットを使用しています: http://msdn.microsoft.com/en-us/library/vstudio/ms172872.aspx

コードを次のように変更しました。

public static void ReadXML(string fileName)
{
    System.Xml.Serialization.XmlSerializer reader =
        new System.Xml.Serialization.XmlSerializer(typeof(Word));
    System.IO.StreamReader file = new System.IO.StreamReader(
        fileName);
    foreach (????)
    {
        Word word=new Word();
        word = (Word) reader.Deserialize(file);
        Words.Add(word); //Words is a List<Word>
    }
}

もちろん、ここでは foreach() ループが適切に使用されていません。これを行う方法がわかりません。

4

2 に答える 2

1

Word個々のオブジェクトを同じファイルにシリアル化するにはどうすればよいですか? これは、反復ごとにファイルをオーバーライドするようなものです。このようDatabaseに、個別のオブジェクトではなく、オブジェクトをシリアル化するだけです。Word

System.Xml.Serialization.XmlSerializer writer =
    new System.Xml.Serialization.XmlSerializer(typeof(Database));
System.IO.StreamWriter file = new System.IO.StreamWriter(fileName);
writer.Serialize(file, yourDatabaseObject);

注: また、が属性Databaseでマークされていることを確認してください。Serializable

于 2012-12-25T17:40:29.210 に答える
1

まず、各単語を 1 つずつシリアル化しないでください。これにより、多数の xml を含む 1 つのファイルが作成されますが、これはもちろん無効です。

シリアライズしたいWords(これはList<Word>) です。したがって、シリアライザーの作成はnew XmlSerializer(typeof(List<Word>)) 、シリアライズは次のようにする必要がありますwriter.Serialize(file, Words);

したがって、コードは次のようになります。

List<Word> Words = ........

WriteXML("a.xml", Words);
var newWords = ReadXML<List<Word>>("a.xml");

public static void WriteXML(string fileName,object obj)
{
    using (var f = File.Create(fileName))
    {
        XmlSerializer ser = new XmlSerializer(obj.GetType());
        ser.Serialize(f, obj);
    }
}

public static T ReadXML<T>(string fileName)
{
    using (var f = File.Open(fileName,FileMode.Open,FileAccess.Read))
    {
        XmlSerializer ser = new XmlSerializer(typeof(T));
        return (T)ser.Deserialize(f);
    }
}

PS:Serializable属性は にのみ必要ですBinaryFormatter。XmlSerializer は必要ありません。

XmlSerializer が使用する属性の詳細については、こちらを参照してください。

于 2012-12-25T21:49:47.637 に答える