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