BinaryFormatter在跨平台应用程序中的应用

时间:2015-05-11 13:59:24

标签: c# android winforms xamarin

我正在创建跨平台应用程序。我正在尝试在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尝试它时 - Debuger停止工作,没有异常消息。行中出现错误:

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

如果我正在使用XmlSerializer,那就没有问题了。 如何反序列化binnary文件? 如果android中不支持binnaryFormater,我可以使用其他一些方法将其序列化为文件。 XML序列化是最后一种方式,因为我希望我的文件尽可能难以阅读。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

从此文件中读取的工作顺序相反