c# - C#如何修复SerializationException奇怪的bug?
问题描述
我有这个代码:
public static void SaveData<T>(string filename, T playerData) where T : class
{
BinaryFormatter formatter = new BinaryFormatter();
filename = Application.persistentDataPath + "/" + filename;
using (var stream = File.OpenWrite(filename))
formatter.Serialize(stream, playerData);
}
public static T LoadData<T>(string filename) where T : class
{
filename = Application.persistentDataPath + "/" + filename;
if (File.Exists(filename))
{
BinaryFormatter formatter = new BinaryFormatter();
using (var stream = File.OpenRead(filename))
return formatter.Deserialize(stream) as T;
}
else
{
Debug.LogError("File not found...");
return null;
}
}
如您所见,我有 2 个用于序列化、反序列化任何类型数据的静态方法。首先,我序列化由 newtonsoft.json 库创建的字符串(json):
var settings = new JsonSerializerSettings();
var json = JsonConvert.SerializeObject(Wevent, Formatting.None);
SaveData<string>(fileName, json);
但是,然后我试图加载相同的文件,我在这行有异常:
using (var stream = File.OpenWrite(filename))
formatter.Serialize(stream, playerData);
完整的错误信息:
SerializationException:输入流不是有效的二进制格式。起始内容(以字节为单位)为:5B-0D-0A-20-20-7B-0D-0A-20-20-20-20-22-54-65-78-74
解决方案
我用@dbc 回答:
" 你为什么要使用 BinaryFormatter 序列化一个已经序列化的 JSON 字符串?为什么不直接将字符串写入磁盘?如果你这样做了,你可以手动查看问题所在。另外,你可以编辑你的问题以分享一个完整的最小可重现示例吗?你写道,* 然后我正在尝试加载相同的文件,我在这行有异常:* 但您显示的代码也是用于序列化,而不是反序列化“
(我将字符串写入磁盘,这对我来说很好)
推荐阅读
- javascript - 如何在 Iphone 上使用我的 React Native 应用程序?
- django - Django - 提交按钮值
- python - 训练 lstm 编码器-解码器模型时,损失和预测为 nan
- javascript - 无法使用 VueJS 读取未定义的属性“目标”
- java - Swagger 类型“Array[SearchAllResponse]”生成为 ArraySearchAllResponse 但随后找不到类
- wifi - ESP32:是否可以做一个桥接 ETH-WIFI
- multithreading - 为什么 setns mount 不适用于多线程进程?
- html - 在 Safari 13 中悬停过渡时失去颜色,这是一个错误吗?
- mongodb - 从对话流写入 MongoDB
- vue.js - Safari 中带有 Bootstrap Table 选项卡顺序问题的 Vue-Multiselect