Portál AbcLinuxu, 17. července 2025 06:37
Řešení dotazu:
IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(stream, MyBindingList); stream.Close(); //X IFormatter formatter = new BinaryFormatter(); Stream stream = new FileStream("MyFile.bin", FileMode.Open, FileAccess.Read, FileShare.Read); MyBindingList<tx> MyBindingList = (BindingList<Tx>) formatter.Deserialize(stream); stream.Close();
var formatter = new System.Xml.Serialization.XmlSerializer();místo
BinaryFormatter
.
(var
mi umožní vynechat datový typ proměnné, takže místo string abc = "def";
můžu použít var abc = "def";
- ale je vhodnější to používat s něčím jednoznačným, třeba s Listem.)
Díky moc. To mi to hodně ulehčí, akorát deserializaci jsem nerozchodil. Ikdyž k načtení snad dojde, ale v BindingListu nic není. Dělám chybu jinde? Nebo jsem to nepochopil?
public static class Data
{
private static BindingList<Kontakt> kontakty = new BindingList<Kontakt>();
public static void Uloz()
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("kontakty.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, kontakty);
stream.Close();
}
public static void Nacti()
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("kontakty.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
BindingList<Kontakt> kontakty = (BindingList<Kontakt>)formatter.Deserialize(stream);
stream.Close();
}
}
Nacti()
načítáš obsah souboru do lokální proměnné, se kterou pracuješ jen v té dané metodě a nikde jinde, takže se nepřenese do BindingListu, který máš někde jinde.
Řešení? Budeš asi chtít, aby metoda Nacti()
vracela BindingList<Kontakt>
, který sis načetl ze souboru do proměnné kontakty
, takže té metodě nastavíš návratový typ BindingList<Kontakt>
a nakonec vrátíš:
return kontakty;A řešení pro část kódu, odkud voláš načítací metodu, si už asi domyslíš.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.