gpt4 book ai didi

c# - 跨平台应用程序中的 BinaryFormatter

转载 作者:行者123 更新时间:2023-11-30 02:10:33 24 4
gpt4 key购买 nike

我正在创建跨平台应用程序。我正在尝试反序列化 android 中的文件。在 Windows 中一切正常。这是我的代码:

[Serializable] //serializacja potrzebna do zapisywania do pliku.
public class dane
{
public byte[] id { get; set; }
public byte[] login { get; set; }
public byte[] haslo { get; set; }
public byte[] link { get; set; }
public byte[] opis { get; set; }
public byte[] dataWygasniecia { get; set; }

public static List<dane> wczytajDaneDoListy(string sciezka) //deserializacja i wczytywanie danych z pliku
{
try
{
if (File.Exists(sciezka)) //jesli plik istnieje
{
Stream str = File.OpenRead(sciezka); //tworzenie strumienia
var desrializer = new BinaryFormatter();//obiekt deserializujący
//var desrializer = new XmlSerializer(typeof(List<dane>)); //dla xml
var listaDanych = (List<dane>)desrializer.Deserialize(str); //deserializacja do listy<dane>
str.Close();
return listaDanych;



}
throw new Exception();
}
catch (Exception)
{
return null; //jesli plik nie istnieje, zwracamy null
}
}
public static void zapiszDaneDoPliku() //serializacja i zapisywanie danych do pliku
{
Stream str = File.Create(zmienneGlobalne.sciezkaDoPliku); //tworzenie strumienia
var serializer = new BinaryFormatter(); //obiekt serializujący
serializer.Serialize(str, zmienneGlobalne.listaWpisow);
//serializacja danych do strumienia(w tym wypadku do pliku)
str.Close();
}
}

当我在 Android 中使用 Xamarin 尝试它时 - 调试器停止工作,没有异常消息。行中出现错误:

var listaDanych = (List<dane>)desrializer.Deserialize(str);

如果我使用的是 XmlSerializer,它可以正常工作。如何反序列化二进制文件?如果 binnaryFormater 在 android 中不受支持,我可以使用其他一些方法将其序列化到文件中。 XML 序列化是最后一种方式,因为我希望我的文件尽可能难以阅读。

最佳答案

如果您希望它与平台无关,请使用基于 JSON 或 XML 的序列化程序。二进制序列化通常会生成更小的文件并且通常速度更快,但它更难编码并且可能与平台无关。

如果您倾向于使用二进制序列化,请查看 Protobuf 序列化器。

请注意,没有序列化可以保护您的文件。如果有人想看看里面 - 他们会的。如果您想保护您通常会遵循以下步骤的内容:

  • 找出一种安全存储加密 key 的方法
  • 从序列化数据中获取字节
  • 使用 key 和强算法(例如AES)对这些字节进行加密
  • 将结果存入二进制文件

如果您需要将此数据发送到其他地方,例如提交到网络服务,您需要将字节编码为 base64。

以相反的顺序读取这个文件

关于c# - 跨平台应用程序中的 BinaryFormatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30169680/

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