C#序列化,对象数组的反序列化

C#序列化,对象数组的反序列化,c#,arrays,serialization,deserialization,C#,Arrays,Serialization,Deserialization,我有这个密码 const int maxbooks = 5; Book[] booklist = new Book[maxbooks]; FileStream fs = File.Open(@"books.txt", FileMode.Open, FileAccess.Read); SoapFormatter sf = new SoapFormatter(); try {

我有这个密码

        const int maxbooks = 5;
        Book[] booklist = new Book[maxbooks];

        FileStream fs = File.Open(@"books.txt", FileMode.Open, FileAccess.Read);
        SoapFormatter sf = new SoapFormatter();

        try
        {

           // something here, deserializing file and assigning to the array

        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            fs.Close();
        }

我已经知道(或者至少,我想我已经知道)如何在一个单独的程序中序列化原始的对象数组。我现在希望对其进行反序列化,并使用反序列化的数据创建一个新数组。仅供参考,这里是我序列化原始数组的另一个文件

        Book firstbook = new Book("Jimbob", "Jimbob book", "first edition", "Jimbob publishing", "1991");
        Book secondbook = new Book("Greg", "Greg book", "third edition", "Unholy publishing", "2010");
        Book thirdbook = new Book("Pingu", "Pingu book", "tenth edition", "Antarctic publishing", "1897");
        Book fourthbook = new Book("Patrick", "Patrick book", "seventh edition", "underwater publishing", "1991");
        Book fifthbook = new Book("Sally", "Sally book", "first edition", "Wowpublishing", "2015");


        const int maxbooks = 5;

        Book[] booklist = new Book[maxbooks];
        booklist[0] = firstbook;
        booklist[1] = secondbook;
        booklist[2] = thirdbook;
        booklist[3] = fourthbook;
        booklist[4] = fifthbook;


        // writing to a file

        FileStream fs = File.Open(@"books.txt", FileMode.Create, FileAccess.Write);
        SoapFormatter sf = new SoapFormatter();

        int bookindex = 0;

        try
        {
            while (bookindex < maxbooks)
            {
                sf.Serialize(fs, booklist[bookindex]);
                bookindex += 1;
            }
        }

        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
       finally
        {
            fs.Close();
        }
Book firstbook=新书(“Jimbob”,“Jimbob书”,“第一版”,“Jimbob出版”,“1991”);
第二本书=新书(“格雷格”,“格雷格书”,“第三版”,“邪恶出版”,“2010”);
第三本书=新书(“Pingu”,“Pingu书”,“第十版”,“南极出版”,“1897”);
第四册=新书(“帕特里克”,“帕特里克书”,“第七版”,“水下出版”,“1991”);
第五本书=新书(“莎莉”、“莎莉书”、“第一版”、“WOW出版”、“2015”);
常量int maxbooks=5;
Book[]booklist=新书[maxbooks];
书目[0]=第一册;
书目[1]=第二册;
书目[2]=第三本书;
书目[3]=第四册;
书目[4]=第五册;
//写入文件
FileStream fs=File.Open(@“books.txt”、FileMode.Create、FileAccess.Write);
SoapFormatter sf=新的SoapFormatter();
int bookindex=0;
尝试
{
while(bookindex

目前正在使用SOAP序列化。任何帮助都将不胜感激。

序列化阵列本身,而不是按项序列化。使用serialiser例程,您将创建许多附加在文件中的无效序列化块。

使用XMLSerializer

例如。 像这样序列化:

    private async Task SaveSettings(Settings settings)
    {

        var folder = Windows.Storage.ApplicationData.Current.LocalFolder;
        var options = Windows.Storage.CreationCollisionOption.ReplaceExisting;

        var file = await folder.CreateFileAsync("Settings.XML", options);
        try
        {


            XmlSerializer SerializerObj = new XmlSerializer(typeof(Settings));

            SerializerObj.Serialize(await file.OpenStreamForWriteAsync(), settings);
        }
        catch
        {
            // handle any kind of exceptions
        }

    }
    private async Task<Settings> LoadSettings()
    {
        Settings settings = new Settings(); 
        var folder = Windows.Storage.ApplicationData.Current.LocalFolder;
        try
        {
            var file = await folder.GetFileAsync("Settings.XML");
            XmlSerializer SerializerObj = new XmlSerializer(typeof(Settings));
            settings = SerializerObj.Deserialize(await file.OpenStreamForReadAsync()) as Settings;
        }
        catch (Exception ex)
        {
            // handle any kind of exceptions
        }
        return settings;
    }
像这样反序列化:

    private async Task SaveSettings(Settings settings)
    {

        var folder = Windows.Storage.ApplicationData.Current.LocalFolder;
        var options = Windows.Storage.CreationCollisionOption.ReplaceExisting;

        var file = await folder.CreateFileAsync("Settings.XML", options);
        try
        {


            XmlSerializer SerializerObj = new XmlSerializer(typeof(Settings));

            SerializerObj.Serialize(await file.OpenStreamForWriteAsync(), settings);
        }
        catch
        {
            // handle any kind of exceptions
        }

    }
    private async Task<Settings> LoadSettings()
    {
        Settings settings = new Settings(); 
        var folder = Windows.Storage.ApplicationData.Current.LocalFolder;
        try
        {
            var file = await folder.GetFileAsync("Settings.XML");
            XmlSerializer SerializerObj = new XmlSerializer(typeof(Settings));
            settings = SerializerObj.Deserialize(await file.OpenStreamForReadAsync()) as Settings;
        }
        catch (Exception ex)
        {
            // handle any kind of exceptions
        }
        return settings;
    }
专用异步任务加载设置()
{
设置=新设置();
var folder=Windows.Storage.ApplicationData.Current.LocalFolder;
尝试
{
var file=await folder.GetFileAsync(“Settings.XML”);
XmlSerializer SerializerObj=新的XmlSerializer(类型(设置));
settings=SerializerObj.反序列化(wait file.OpenStreamForReadAsync())作为设置;
}
捕获(例外情况除外)
{
//处理任何类型的异常
}
返回设置;
}
此示例序列化名为设置的对象。您可以将其更改为序列化对象数组


这是来自windows 8应用程序的,因此您可能需要稍微调整它。

问题是:“我现在正在寻找反序列化,并使用反序列化的数据创建一个新数组。”可能线程会帮助您。