-
[C#] Serializace
Zdravim,
resim serializaci v C#. Konkretne se mi jedna o tohle:
Kód:
List<List<int>> g = new List<List<int>>();
g.Add(new List<int>());
g.Add(new List<int>());
g.Add(g[0]); // zde opravdu vkladam odkaz na prvni seznam
g[0].Add(1);
XmlSerializer x = new XmlSerializer(typeof(List<List<int>>));
StringWriter sw = new StringWriter();
x.Serialize(sw, g);
g = (List<List<int>>)x.Deserialize(new StringReader(sw.ToString()));
g[0].Add(2);
promenna g obsahuje pred serializaci 3 seznamy integeru = {{1},{},{1}};
po serializaci a deserializaci opet to same = {{1},{},{1}};
Ovsem posledni prikaz (g[0].Add(2); ) zmeni jen prvni prvni seznam. Cili v g je = {{1,2},{},{1}};
Zda se tedy (a podle obsahu sw ani jina moznost neni) ze treti seznam v g po deserializaci neni odkazem na prvni seznam.
Jak docilit toho aby reference zustaly zachovany?
PS: z prednasky o Jave si pamatuju, ze Java by reference zachovavat mela, tak je mi nejasne, proc to C# neumi :/
-
Re: [C#] Serializace
Tak uz jsem na to prisel :oops:
Jde o to, ze serializator XmlSerializer nepodporuje reference. Musi se pouzit BinaryFormatter(pripadne SOAP formatter, nemam odzkouseno), ten dokaze zachovavat reference.
-
Re: [C#] Serializace
jen abych prispel k tematu XML serializace v .NET 2:
pokud je zapotrebi vlastni serializace, trida muze implementovat rozhrani ISerializable
vice napr. zde : http://msdn2.microsoft.com/en-us/lib...ializable.aspx