gpt4 book ai didi

c# - 二进制反序列化中的 NullReferenceException

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:59 24 4
gpt4 key购买 nike

所以我有一个可序列化类 Student,我希望我的 ReadFromFile 方法反序列化我的文件,这样我就可以知道我的对象中已经有多少条记录,这样当我想向我的数组添加新记录时我可以知道最后一个数组的索引是什么,之后我可以将新记录放入索引号中。该函数在 "Console.WriteLine(st2[j].FName + ""+ st2[j].LName);"的第二次传递中给我一个错误并告诉我

NullReferenceException was unhandled

它只写我的记录中的第一个项目,而不是其余的。

public static int ReadFromFile()
{
int j = 0;
string path = @"students.dat";

try
{
Students[] st2 = new Students[100];

BinaryFormatter reader = new BinaryFormatter();
FileStream input = new FileStream(path, FileMode.Open, FileAccess.Read);

st2 = (Students[])reader.Deserialize(input);

while (true)
{
st[j] = new Students();
Console.WriteLine(st2[j].FName + " " + st2[j].LName);
j++;
}

Console.WriteLine("there are " + j + "students in the file");

input.Close();
return j;
}
catch (FileNotFoundException)
{
Console.WriteLine("there are no student records yet.");
return j;
}
}

这是我的序列化方法:

public static void WriteInFileFromInput(Students[] x)
{

string path = @"students.dat";

if (File.Exists(path))
{
BinaryFormatter Formatter = new BinaryFormatter();
FileStream output = new FileStream(path, FileMode.Append, FileAccess.Write);

Formatter.Serialize(output, st);

output.Close();
}

else
{
BinaryFormatter Formatter = new BinaryFormatter();
FileStream output = new FileStream(path, FileMode.CreateNew, FileAccess.Write);

Formatter.Serialize(output, st);

output.Close();
}
}

最佳答案

正确的循环应该是这样的(假设数据被正确序列化):

foreach (var student in st2) // Replaces the while loop in the OP
{
Console.WriteLine(student.FName + " " + student.LName);
++j;
}

但是,我认为序列化有错误,所以这仍然会给出一个空引用异常。如果是这样,您可以发布序列化数据的代码吗?

关于c# - 二进制反序列化中的 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20544497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com