Pregunta

¿Cuál es la mejor manera de almacenar instancias de una clase a archivo / base de datos?

Tenemos una clase base llamada de comando y un montón de clases derivadas. Los usuarios crean instancias de estas clases mediante la adición de comandos a un diseñador gráfico donde pueden configurarlos. (Establecer las propiedades).

A continuación, necesitamos una manera de almacenar estos "comandos" a un archivo sin perder cualquier información.

Una idea era utilizar db4o, pero la licencia GPL no es aceptable para este proyecto.

Cualquier sugerencia o ejemplos de código?

Actualización:

(Con el fin de "de-blurryfie" mi pregunta: p)

El código generado podría ser algo como:

    command[i++] = new DelayInSecondsCommand(2);
    command[i++] = new DaliRequestCommand(1, false, 254);
    command[i++] = new DaliRequestCommand(2, false, 254);
    command[i++] = new DaliRequestCommand(3, false, 254);
    command[i++] = new WaitInSecondsCommand(2);             
    command[i++] = new DaliRequestCommand(1, false, 0);
    command[i++] = new DaliRequestCommand(2, false, 0);
    command[i++] = new DaliRequestCommand(3, false, 0);
    command[i++] = new JumpCommand(0);

Pero entonces con un montón de diferentes comandos.

Sé que es posible con la serialización de .NET, Altough nunca he usado antes, pero me preguntaba si hay mejores alternativas, como he dicho db4o parece agradable, pero la licencia no se ajusta al proyecto.

Actualización 2:

Gracias por las respuestas. Probablemente voy a ir con la solución de serialización ahora, pero Voy a mirar en las otras opciones también. F.Y.I. los datos se almacenan en una base de datos SQL compacto.

¿Fue útil?

Solución

serialización hace el truco! La serialización es nada más que la conversión de un objeto o un gráfico conectado de objetos en una corriente de bytes (con el fin de persistir el estado actual del objeto). Esto puede ser una secuencia binaria, XML o lo que sea. Usted no tiene que hacer esta conversión por su propio puesto .Net tiene un gran apoyo para la serialización. Una vez que un objeto serializado, usted es libre para almacenar estos datos en un archivo o base de datos. Del mismo modo, una corriente de bytes que representan un objeto serializado se puede deserializar en un objeto que tendrá el mismo estado que la original.

BTW: Una vez que tenga un flujo de bytes serializado, puede aplicar algunas funciones más en él, por ejemplo, compresión o cifrado.

Otros consejos

¿Está tratando de guardar los datos en las tablas? o como datos blob / CLOB? Ya que mencionas archivos, supongo que este último: cualquiera de los serializadores .NET estándar debe estar bien - todos ellos el soporte de herencia, etc. Me volvería a considerar para DataContractSerializer, ya que combina el apoyo sobre el terreno (como BinaryFormatter) , y el ensamblaje de la independencia de XmlSerializer.

También podría considerar cosas más esotéricos como protobuf-net .

Así que: ¿qué es lo que hay que hacer eso no funcionará bajo los serializadores estándar

DB40 también proporciona una licencia commerical pero ha sido recientemente adquirida por vertiente así que tal vez es posible que desee ver en eso. Este tipo de base de datos se conoce como base de datos orientada a objetos y es una manera de crear instancias de clases persistentes que es muy diferente a las bases de datos relacionales que funcionan utilizando tablas.

Este (wikpedia.org) es una buena lectura de bases de datos y orienated objeto esta (también Wikipedia) es una lista de algunas de las opciones disponibles.

En mis bases de datos de objetos de opinión son mucho mejor y más potente que el relacional y sólo voy a utilizar bases de datos relacionales como MySQL si realmente tengo que (no muy a menudo).

Me recommomend ves estos videos y descargar la prueba.

Hay http://www.neodatis.org . Su LGPL, pero la vez que utiliza sólo había una aplicación para Java. Ahora, hay una versión "beta" para C #, pero yo no probados.

pregunta bastante borrosa, ¿por qué no sólo tiene que utilizar .NET de una función de las posibilidades de serialización (por ejemplo XmlSerializer).

La serialización es una gran manera de almacenar este tipo de datos. Ver http: //blog.paranoidferret. com / index.php / 2008/06/20 / CSharp-tutorial-xml-serialización /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top