C# 如何将XML数据反序列化为从列表序列化的列表?

C# 如何将XML数据反序列化为从列表序列化的列表?,c#,xml,xml-deserialization,C#,Xml,Xml Deserialization,我用以下代码将一组记录从列表序列化为XML文件。这非常有效,我有一个非常好的XML文件,在我关闭程序时存储数据 当程序打开时,我现在如何将这些数据读回列表?我似乎不知道如何循环浏览文件中的记录并将其存储在我的记录列表中 private void WriteXML() { try { System.Xml.Serialization.XmlSerializer XMLwriter = new System.Xml.Serial

我用以下代码将一组记录从列表序列化为XML文件。这非常有效,我有一个非常好的XML文件,在我关闭程序时存储数据

当程序打开时,我现在如何将这些数据读回列表?我似乎不知道如何循环浏览文件中的记录并将其存储在我的记录列表中

    private void WriteXML()
    {
        try
        {
            System.Xml.Serialization.XmlSerializer XMLwriter = new System.Xml.Serialization.XmlSerializer(typeof(callsignRecord));

            System.IO.StreamWriter XMLfile = new System.IO.StreamWriter("Known Callsigns.xml");
            foreach (callsignRecord callsign in Callsigns)
            {
                XMLwriter.Serialize(XMLfile, callsign);
            }
            XMLfile.Close();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
以下是我所得到的信息:

    private void ReadXML()
    {
        try
        {
            System.Xml.Serialization.XmlSerializer XMLreader = new System.Xml.Serialization.XmlSerializer(typeof(callsignRecord));

            System.IO.StreamReader XMLfile = new System.IO.StreamReader("Known Callsigns.xml");
            while(!XMLfile.EndOfStream)
            {
                // Okay, great I can Deseralize the file, but how do the records go from the file to the List with this?
                XMLreader.Deserialize(XMLfile);
            }
            XMLfile.Close();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
作为参考,存储在XML文件中的数据来自以下格式的列表:

public class callsignRecord
{
    public string User { get; set; }
    public List<AliasRecord> AliasRecords;
}

public class AliasRecord
{
    public string Alias { get; set; }
    public string Number { get; set; }
}
public类callsignRecord
{
公共字符串用户{get;set;}
公共记录清单;
}
公共类别名记录
{
公共字符串别名{get;set;}
公共字符串编号{get;set;}
}
我还尝试将整个列表序列化为一个对象,而不是一条记录一条记录地进行序列化,但这也不管用

编辑:下面显示的代码不起作用。当我尝试它时失败的原因是,我首先尝试反序列化一个按记录序列化的列表。显然这两种方法不兼容,下面的代码是正确的方法

    private void WriteXML()
    {
        try
        {
            var XMLwriter = new XmlSerializer(typeof(List<callsignRecord>));

            System.IO.StreamWriter XMLfile = new System.IO.StreamWriter("Known Callsigns.xml");
            XMLwriter.Serialize(XMLfile, Callsigns);
            XMLfile.Close();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }

    private void ReadXML()
    {
        System.IO.StreamReader XMLfile;
        try
        {
            var XMLreader = new XmlSerializer(typeof(List<callsignRecord>));

            XMLfile = new System.IO.StreamReader("Known Callsigns.xml");
            Callsigns = (List<callsignRecord>)XMLreader.Deserialize(XMLfile);
            XMLfile.Close();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
            //XMLfile.Close();
        }
    }
private void WriteXML()
{
尝试
{
var XMLwriter=新的XmlSerializer(typeof(List));
System.IO.StreamWriter XMLfile=new System.IO.StreamWriter(“Known Callsigns.xml”);
序列化(XMLfile,呼号);
XMLfile.Close();
}
捕获(例外e)
{
MessageBox.Show(e.Message);
}
}
私有void ReadXML()
{
System.IO.StreamReader xml文件;
尝试
{
var XMLreader=新的XmlSerializer(typeof(List));
XMLfile=new System.IO.StreamReader(“Known Callsigns.xml”);
Callsigns=(列表)XMLreader.Deserialize(XMLfile);
XMLfile.Close();
}
捕获(例外e)
{
MessageBox.Show(e.Message);
//XMLfile.Close();
}
}
你能试试这个吗

     // Create an instance of CallsignRecordclass.
     CallsignRecord serializeObject = new CallsignRecord();
     // Create an instance of new TextReader.
     TextReadertxtReader = new StreamReader(@”C:\Callsigns.xml”);
     // Create and instance of XmlSerializer class.
     XmlSerializerxmlSerializer = new XmlSerializer(typeof(CallsignRecord));
     // Deserialize from the StreamReader.
     serializeObject = (CallsignRecord)xmlSerializer.Deserialize(txtReader);
     // Close the stream reader
     txtReader.Close();
详情请点击这里


将整个列表序列化为对象的最后一个代码块对我来说很好,对您来说也应该很好。在测试这个特定代码块时,您能更具体地说明哪些地方工作不好吗?@har07奇怪。当尝试读取时,返回“XML文档(2,2)中存在错误”。当尝试写入时,我收到一个错误,告诉我该文件正被另一个进程使用。我不明白,因为我只在程序启动和程序关闭时访问文件。@har07因此,在阅读您的帖子后,我返回到我的程序。我试图在程序启动时打开的文件最初是由recor序列化的记录d、 因此无法反序列化。在尝试将文件反序列化为对象之前,当我确保该文件已序列化为对象时,代码起作用。我想我需要在开始时添加代码,以检查现有文件,然后再尝试打开它。