Bonsoir,
pour moi les méthodes de serialization et de deserialization n'ont pas a être dans les classes métiers.
J'ai remodelé comme ça:
[Serializable]
public class WasteGasComposition
{
public static double o2;
public static double co2;
public static double h2o;
public static double so2;
public static double n2;
public static double ar;
public double O2
{
get { return o2; }
set { o2 = value; }
}
public double CO2
{
get { return co2; }
set { co2 = value; }
}
public double H2O
{
get { return h2o; }
set { h2o = value; }
}
public double SO2
{
get { return so2; }
set { so2 = value; }
}
public double N2
{
get { return n2; }
set { n2 = value; }
}
public double Ar
{
get { return ar; }
set { ar = value; }
}
}
[Serializable]
public class GlobalClass
{
List<WasteGasComposition> listeWG;
List<DataBalance> listeDataBalance;
public List<WasteGasComposition> ListeWG
{
get { return listeWG; }
set { listeWG = value; }
}
public List<DataBalance> ListeDataBalance
{
get { return listeDataBalance; }
set { listeDataBalance = value; }
}
public GlobalClass()
{
listeWG = new List<WasteGasComposition>();
listeDataBalance = new List<DataBalance>();
}
}
J'ai "inventé" la 2eme classe pour le test:
[Serializable]
public class DataBalance
{
public DataBalance()//il faut mettre un constructeur sans paramètres sinon XmlTextReader beugue
{
}
public int int1 { get; set; }
public int int2 { get; set; }
}
et dans mon formulaire j'ai mis ces 3 méthodes:
private void essaiLaTataDu91()
{
GlobalClass monGlobal = new GlobalClass();
//j'initialise mes listes directement dans monglobal pour gagner 2 lignes pour l'exemple
monGlobal.ListeWG.Add(new WasteGasComposition { Ar 1.0, CO2 11.0, H2O = 12.0, N2 = 13.0, O2 = 14.0, SO2 = 15.0 });
monGlobal.ListeWG.Add(new WasteGasComposition { Ar 2.0, CO2 12.0, H2O = 13.0, N2 = 14.0, O2 = 15.0, SO2 = 16.0 });
monGlobal.ListeWG.Add(new WasteGasComposition { Ar 3.0, CO2 13.0, H2O = 14.0, N2 = 15.0, O2 = 16.0, SO2 = 17.0 });
monGlobal.ListeDataBalance.Add(new DataBalance { int1 1, int2 2 });
monGlobal.ListeDataBalance.Add(new DataBalance { int1 2, int2 3 });
monGlobal.ListeDataBalance.Add(new DataBalance { int1 3, int2 4 });
//je serialize dans le répertoire Bin du projet
serializeGlobal(monGlobal);
//je déserialize un nouvel objet identique au 1er
GlobalClass monGlobal2 = DeserializationGlobal();
}
private void serializeGlobal(GlobalClass monGlobal)
{
using (FileStream fs = new FileStream("toto.xml", FileMode.Create))
{
XmlSerializer xSer = new XmlSerializer(monGlobal.GetType());
xSer.Serialize(fs, monGlobal);
xSer = null;
}
}
private GlobalClass DeserializationGlobal()
{
XmlSerializer x = new XmlSerializer(typeof(GlobalClass));
FileStream fs = new FileStream("toto.xml", FileMode.Open);
XmlReader reader = new XmlTextReader(fs);
object MonObjet = x.Deserialize(reader);
x = null;
fs = null;
reader = null;
return (GlobalClass)MonObjet;
}
et ça marche.
Whismeril