Serialisation de classe incrustée dans un writer
Bonjour
J'ai un problème de serialisation que j'essaye de comprendre
Je vais essayer d'expliquer sans etaler trop de code
Je dispose d'une classe C_PrintSettings que je parviens a serialiser et deserialize automatiquement dans un fichier que je force ! (voir code ci dessous)
Par contre si j'utilise la meme technique en passant par un XmlWriter et un XmlReader qui emballent d'autres choses dans le fichier sérializé je retrouve ma classe tres correctement serializée dans le fichier global mais je ne parviens pas a la désérializer (mon XmlDeserialize.deserialize renvoie une exception)
Je peux imaginer que c'est parce que le deserialize ne voit pas bien ou commencer ou bien ou s'arreter dans le fichier général mais je ne vois pas ce qu'il faut faire pour y arriver
Merci aux connaisseurs de ce sujt que j'essaye de bien digérer !
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| // *******************************************************************************************
private void SaveSetting()
{
XmlSerializer xs;
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
StreamWriter sw;
string TemplateFile = "d:/tmp/xxx.xml";
if (TemplateFile.Length <= 0)
{
return;
}
xs = new XmlSerializer(typeof(C_PrintSettings));
using (sw = new StreamWriter(TemplateFile, false, Encoding.Default))
{
xs.Serialize(sw, Document.PrintSettings,ns);
sw.Close();
}
}
private void LoadSetting()
{
C_PrintSettings ps = new C_PrintSettings();
StreamReader sr;
sr = new StreamReader("d:/tmp/xxx.xml", Encoding.Default);
XmlSerializer xs;
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
xs = new XmlSerializer(typeof(C_PrintSettings));
try
{
ps = (C_PrintSettings)xs.Deserialize(sr);
}
catch (Exception e)
{
MessageBox.Show("Erreur", "Error");
}
} |
illustration + de détails
re-bonjour
Pour essayer d'un peu mieux expliquer le problème voici
1- Le detail du code que j'emploie pour lire mon fichier serialisé et qui bloque sur
2- Le debut du fichier et la partie significative
J'ai le sentiment que je dois faire qq chose pour positionner le reader su C_printsetting avant d'appeller le XmlSerialize mais je ne sais pas comment ni meme si ce que je veux faire peut marcher ? :oops::(
Code:
1 2 3 4 5 6 7 8 9 10 11
| public void ReadXml(XmlReader reader)
{
if (!reader.IsStartElement("Document"))
{
return;
}
title = reader["Title"];
printSettings=C_PrintSettings.ReadXmlR(reader);
} |
Citation:
Classe C_Printsetting encapsulée dans document Ne marche pas :
<?xml version="1.0" encoding="utf-8"?>
<Document Type="Mapscope.Document.1" Title="Test Oli" Version="1.0.0.2">
<C_PrintSettings>
<LgdDrawCellBorder>true</LgdDrawCellBorder>
<LgdDrawFrameBorder>true</LgdDrawFrameBorder>
<LgdDrawColorBorder>true</LgdDrawColorBorder>
<LgdDrawColHead>true</LgdDrawColHead>
<LgdDrawMainHead>true</LgdDrawMainHead>
<LgdBorderColor>
<A>255</A>
<R>255</R>
<G>0</G>
<B>128</B>
</LgdBorderColor>
// etc
Classe C_Printsetting seule dans son fichier ca marche en utilisant le XmlSerialiser avec un stream :
<?xml version="1.0" encoding="Windows-1252"?>
<C_PrintSettings>
<LgdDrawCellBorder>true</LgdDrawCellBorder>
<LgdDrawFrameBorder>true</LgdDrawFrameBorder>
<LgdDrawColorBorder>true</LgdDrawColorBorder>
<LgdDrawColHead>true</LgdDrawColHead>
<LgdDrawMainHead>true</LgdDrawMainHead>
<LgdBorderColor>
<A>255</A>
<R>255</R>
<G>0</G>
<B>128</B>
</LgdBorderColor>