////////////////////////////////////////////////////////////
        public override CResultAErreur Serialize(C2iSerializer serializer)
        {
            CResultAErreur result   = CResultAErreur.True;
            int            nVersion = GetNumVersion();

            result = serializer.TraiteVersion(ref nVersion);
            if (result)
            {
                result = base.Serialize(serializer);
            }
            if (!result)
            {
                return(result);
            }

            bool bHasConteneur;

            serializer.TraiteString(ref m_strNomTableFille);
            int nNbChampsFille = m_strChampsFille.Length;

            serializer.TraiteInt(ref nNbChampsFille);
            switch (serializer.Mode)
            {
            case ModeSerialisation.Ecriture:
                foreach (string strChamp in m_strChampsFille)
                {
                    string strTmp = strChamp;
                    serializer.TraiteString(ref strTmp);
                }
                break;

            case ModeSerialisation.Lecture:
                m_strChampsFille = new string[nNbChampsFille];
                for (int nChamp = 0; nChamp < nNbChampsFille; nChamp++)
                {
                    string strTmp = "";
                    serializer.TraiteString(ref strTmp);
                    m_strChampsFille[nChamp] = strTmp;
                }
                break;
            }

            switch (serializer.Mode)
            {
            case ModeSerialisation.Ecriture:
                bHasConteneur = m_objetConteneur != null;
                serializer.TraiteBool(ref bHasConteneur);
                if (bHasConteneur)
                {
                    Type tp = m_objetConteneur.GetType();
                    serializer.TraiteType(ref tp);
                    object[] lstValeurs = m_objetConteneur.GetValeursCles();
                    int      nNbValeurs = lstValeurs.Length;
                    serializer.TraiteInt(ref nNbValeurs);
                    foreach (object obj in lstValeurs)
                    {
                        object obj_tmp = obj;
                        serializer.TraiteObjetSimple(ref obj_tmp);
                    }
                }
                break;

            case ModeSerialisation.Lecture:
                bHasConteneur = false;
                serializer.TraiteBool(ref bHasConteneur);
                if (!bHasConteneur)
                {
                    m_objetConteneur = null;
                }
                else
                {
                    Type tp = null;
                    serializer.TraiteType(ref tp);
#if PDA
                    m_objetConteneur = (CObjetDonnee)Activator.CreateInstance(tp);
                    m_objetConteneur.ContexteDonnee = m_contexte;
#else
                    m_objetConteneur = (CObjetDonnee)Activator.CreateInstance(tp, new object[] { m_contexte });
#endif
                    int nNbCles = 0;
                    serializer.TraiteInt(ref nNbCles);
                    object[] lst = new object[nNbCles];
                    for (int nCle = 0; nCle < nNbCles; nCle++)
                    {
                        serializer.TraiteObjetSimple(ref lst[nCle]);
                    }
                    m_objetConteneur.PointeSurLigne(lst);
                }
                break;
            }

            if (serializer.Mode == ModeSerialisation.Lecture)
            {
                Init(m_objetConteneur, m_strNomTableFille, m_strChampsFille, m_bAppliquerFiltreParDefaut);
            }

            return(result);
        }