gpt4 book ai didi

.net - 序列化 Entity Framework 对象,保存到文件,读取和反序列化

转载 作者:行者123 更新时间:2023-12-04 12:43:23 25 4
gpt4 key购买 nike

标题应该清楚我要做什么 - 获取 Entity Framework 对象,将其序列化为字符串,将字符串保存在文件中,然后从文件加载文本并将其重新序列化为对象。嘿快点!

但当然它不起作用,否则我不会在这里。当我尝试重新序列化时,我收到“输入流不是有效的二进制格式”错误,所以我显然在某处丢失了一些东西。

这就是我序列化和保存数据的方式:

 string filePath = System.Configuration.ConfigurationManager.AppSettings["CustomersLiteSavePath"];
string fileName = System.Configuration.ConfigurationManager.AppSettings["CustomersLiteFileName"];

if(File.Exists(filePath + fileName))
{
File.Delete(filePath + fileName);
}

MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, entityFrameWorkQuery.First());
string str = System.Convert.ToBase64String(memoryStream.ToArray());

StreamWriter file = new StreamWriter(filePath + fileName);
file.WriteLine(str);
file.Close();

正如您所期望的,这给了我一个大的无意义的文本文件。然后我尝试在其他地方重建我的对象:
            CustomerObject = File.ReadAllText(path);

MemoryStream ms = new MemoryStream();
FileStream fs = new FileStream(path, FileMode.Open);
int bytesRead;
int blockSize = 4096;
byte[] buffer = new byte[blockSize];

while (!(fs.Position == fs.Length))
{
bytesRead = fs.Read(buffer, 0, blockSize);
ms.Write(buffer, 0, bytesRead);
}

BinaryFormatter formatter = new BinaryFormatter();
ms.Position = 0;
Customer cust = (Customer)formatter.Deserialize(ms);

然后我得到二进制格式错误。

我显然非常愚蠢。但以什么方式?

干杯,
马特

最佳答案

当您保存它时,您(出于您最了解的原因)应用了 base-64 - 但在阅读它时您没有应用 base-64。 IMO,只需完全删除 base-64 - 并直接写入 FileStream .这也省去了在内存中缓冲它的麻烦。

例如:

    if(File.Exists(path))
{
File.Delete(path);
}
using(var file = File.Create(path)) {
BinaryFormatter ser = new BinaryFormatter();
ser.Serialize(file, entityFrameWorkQuery.First());
file.Close();
}


     using(var file = File.OpenRead(path)) {
BinaryFormatter ser = new BinaryFormatter();
Customer cust = (Customer)ser.Deserialize(file);
...
}

作为旁注,您可能会发现 DataContractSerializer为 EF 制作比 BinaryFormatter 更好的序列化器.

关于.net - 序列化 Entity Framework 对象,保存到文件,读取和反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5041172/

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