public static void CopieTo(I2iSerializable source, I2iSerializable cible, Dictionary <Type, object> tableObjetsPourSerializer) { try { if (source == null) { return; } if (cible == null) { return; } MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); C2iSerializer serializer = new CSerializerSaveBinaire(writer); CResultAErreur result = source.Serialize(serializer); if (result) { stream.Seek(0, SeekOrigin.Begin); BinaryReader reader = new BinaryReader(stream); serializer = new CSerializerReadBinaire(reader); if (tableObjetsPourSerializer != null) { foreach (KeyValuePair <Type, object> keyVal in tableObjetsPourSerializer) { serializer.AttacheObjet(keyVal.Key, keyVal.Value); } } result = cible.Serialize(serializer); reader.Close(); } writer.Close(); I2iCloneableAvecTraitementApresClonage clone = cible as I2iCloneableAvecTraitementApresClonage; if (clone != null) { clone.TraiteApresClonage(source); } } catch (Exception e) { string strTmp = e.ToString(); Console.WriteLine(I.T("Serializable copy error @1|30043 ", strTmp)); } }
/// <summary> /// récupère l'objet dans la valise /// Le data du result contient l'objet /// </summary> /// <param name="objetsAttaches">Par couple : type objet, objet attachés aux sérializers</param> /// <returns></returns> public CResultAErreur GetObjet(params object[] objetsAttaches) { I2iSerializable objet = null; MemoryStream stream = new MemoryStream(m_data); BinaryReader reader = new BinaryReader(stream); CSerializerReadBinaire serializer = new CSerializerReadBinaire(reader); for (int nParam = 0; nParam < objetsAttaches.Length; nParam += 2) { serializer.AttacheObjet((Type)objetsAttaches[nParam], objetsAttaches[nParam + 1]); } CResultAErreur result = serializer.TraiteObject(ref objet); if (result) { result.Data = objet; } reader.Close(); stream.Close(); return(result); }