我正在创建跨平台应用程序。我正在尝试在 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 序列化是最后一种方法,因为我希望我的文件尽可能难以阅读。
如果您希望它与平台无关,请使用基于 JSON 或 XML 的序列化器。二进制序列化通常会生成较小的文件并且通常速度更快,但编码更困难并且可能与平台无关。
如果您倾向于使用二进制序列化,请查看 Protobuf 序列化程序。
请注意,任何序列化都无法保护您的文件。如果有人想看看里面 - 他们会的。如果您想保护内容,通常会按照以下步骤操作:
如果您需要将此数据发送到其他地方,例如提交到 Web 服务,您需要将字节编码为 base64。
读取此文件的顺序相反