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应用程序的,因此您可能需要稍微调整它。问题是:“我现在正在寻找反序列化,并使用反序列化的数据创建一个新数组。”可能线程会帮助您。