跨平台应用程序中的BinaryFormatter

问题描述 投票:0回答:1

我正在创建跨平台应用程序。我正在尝试在 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();
    }
}

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

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

如果我使用

XmlSerializer
,它可以正常工作。 如何反序列化二进制文件?

如果Android不支持

binaryFormatter
,我可以使用其他一些方法将其序列化到文件。 XML 序列化是最后一种方法,因为我希望我的文件尽可能难以阅读。

c# android winforms xamarin
1个回答
1
投票

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

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

请注意,任何序列化都无法保护您的文件。如果有人想看看里面 - 他们会的。如果您想保护内容,通常会按照以下步骤操作:

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

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

读取此文件的顺序相反

© www.soinside.com 2019 - 2024. All rights reserved.