elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [C#] Problemas con Serialization.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C#] Problemas con Serialization.  (Leído 6,390 veces)
P[i]


Desconectado Desconectado

Mensajes: 472


Ver Perfil
[C#] Problemas con Serialization.
« en: 7 Septiembre 2007, 22:02 pm »

Hola he hecho esta clase para facilitar el guardado en archivos xml os muestro lo que tengo:
Código:

namespace BFL
{
    /************************************************************************/
    public class Dif
    {
        [XmlElement("difcad")]
        private string _difcad;
        [XmlElement("diffu")]
        private string _diffu;

        public long difcad
        {
            get
            {
                return Convert.ToInt64(_difcad);
            }
            set
            {
                _difcad = value.ToString();
            }
        }

        public long diffu
        {
            get
            {
                return Convert.ToInt64(_diffu);
            }
            set
            {
                _diffu = value.ToString();
            }
        }

        public Dif() { }

        public Dif(long cad, long fu)
        {
            _difcad = cad.ToString();
            _diffu = fu.ToString();
        }
    }

    /***************************************************************************/
    [XmlRoot("Datos")]
    public class Datos
    {
        private Dif[] _DifList = null;
        [XmlElement("cadena")]
        public string cadena = "";
        [XmlElement("fuente")]
        public string fuente = "";
        [XmlElement("_oldpos")]
        private string _oldpos = "";
        [XmlElement("_oldmin")]
        private string _oldmin = "";
        [XmlElement("_max")]
        public string _max = "";

        public int oldpos
        {
            get { return Convert.ToInt32(_oldpos); }
            set { _oldpos = value.ToString(); }
        }

        public int oldmin
        {
            get { return Convert.ToInt32(_oldmin); }
            set { _oldmin = value.ToString(); }
        }

        public int max
        {
            get { return Convert.ToInt32(_max); }
            set { _max = value.ToString(); }
        }


        public Datos() {}

        public Datos(int DifSize)
        {
            _DifList = new Dif[DifSize];
}

        [XmlArray("DifArray")]
        [XmlArrayItem("dif")]
        public Dif[] DifCollection
        {
            get
            {
                return _DifList;
            }
            set
            {
                _DifList = value;
            }
        }

        public Dif this[int index]
        {
            get
            {
                if (index <= _DifList.GetUpperBound(0) || index > -1)
                    return (Dif)_DifList[index];
                else
                    throw new IndexOutOfRangeException("Invalid index value passed.");
            }
            set
            {
                if (index <= _DifList.GetUpperBound(0) || index > -1)
                    _DifList[index] = value;
                else
                    throw new IndexOutOfRangeException("Invalid index value passed.");
            }
        }
    }

    /***************************************************************************/
    public class DatosXml
    {
        public DatosXml() {}

        public struct StDatos
        {
            public bool lleno;
            public Dif[] DifArray;
            public string cadena;
            public string fuente;
            public int oldpos;
            public int oldmin;
            public int max;
        }

        public bool Guardar(Dif[] DifArray, string cadena, string fuente,
                        int oldpos, int oldmin, int max, string FileName)
        {
            Datos dat = new Datos(DifArray.Length);
            for (int i = 0; i < DifArray.Length; i++)
            {
                dat[i]= DifArray[i];
                dat[i].difcad += dat[i].difcad + 110;
                dat[i].diffu += dat[i].diffu + 110;
            }
            dat.cadena = cadena;
            dat.fuente = fuente;
            dat.oldpos = oldpos;
            dat.oldmin = oldmin;
            dat.max = max;

         //   if (File.OpenWrite(FileName).CanWrite == true)
          //  {
                   XmlSerializer xs = new XmlSerializer(typeof(Datos));
           
             
                    XmlWriter n = XmlWriter.Create("hola");

                    System.Console.WriteLine("Cadena:" + dat.cadena);
                    System.Console.WriteLine("Fuente:" + dat.fuente);
                    System.Console.WriteLine("OldPos:" + dat.oldpos.ToString());
                    System.Console.WriteLine("OldMin:" + dat.oldmin.ToString());
                    System.Console.WriteLine("Max:" + dat.max.ToString());

                    for (int i = 0; i < dat.DifCollection.Length; i++)
                    System.Console.WriteLine("["+i.ToString()+"] - difcad:" + dat[i].difcad + "  - diffu:"+dat[i].diffu);
                   
                   
                    xs.Serialize(n, dat);
               

                return true;
           
        }
   
        public StDatos Abrir(string FileName)
        {
            StDatos stdat = new StDatos();
            stdat.lleno = false;
            if (File.OpenRead(FileName).CanWrite == true)
            {
                XmlSerializer xs = new XmlSerializer(typeof(Datos));
                if (xs.CanDeserialize(XmlReader.Create(FileName)) == true)
                {
                    Datos dat = (Datos)xs.Deserialize(XmlReader.Create(FileName));
                    for (int i = 0; i < dat.DifCollection.Length; i++)
                        stdat.DifArray[i] = dat[i];
                    stdat.cadena = dat.cadena;
                    stdat.fuente = dat.fuente;
                    stdat.oldpos = dat.oldpos;
                    stdat.oldmin = dat.oldmin;
                    stdat.max = dat.max;
                    stdat.lleno = true;
                    return stdat;
                }
            }
            return stdat;
        }
    }
}


De compilacion no me da ningun error y al ejecutar todo esta bien aparentemente pero cuendo llega aki (esta en la funcion Guarda):


Código:
   xs.Serialize(n, dat);


Pues me sale este error:
Citar
{"Error al generar el documento XML."}
Mas en profundidad:
{"'.', valor hexadecimal 0x00, es un carácter no válido."}

En la paranoia por descubrir el error como veran pase todo a string pero aun asi me sigue dando este error y lo unico que se me ocurre esque este error venga del '\0' que finaliza los string pero claro este que yo sepa no se puede quitar.

Bueno haber si alguien me puede ayudar con esto que estoy que no puedo mas.

Gracias de anteano.


« Última modificación: 7 Septiembre 2007, 22:03 pm por P[i] » En línea

P[i]


Desconectado Desconectado

Mensajes: 472


Ver Perfil
Re: [C#] Problemas con Serialization.
« Respuesta #1 en: 8 Septiembre 2007, 16:01 pm »

Bueno despues de toda la noche e descubierto que el error no estaba en este codigo la variables cadena y fuente las habia manipulado anteriormente desde un tipo (char*) y por lo visto despues tienes que volver a crear la variable porque sino da muchos errores. La solucion antes de pasarle la variables string a la funcion guardar le hay que hacer esto:
Código:
fixed(char* cad = cadena)
   nuevacadena = new string(cad);

Saludos.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
funcionamiento de la librería de serialization de json
.NET (C#, VB.NET, ASP)
shadu 0 1,437 Último mensaje 12 Diciembre 2018, 18:23 pm
por shadu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines