2009-09-01 25 views
7

¿Cuáles son serialización de objetos y Deserialización? ¿Qué diferencia hace serialización tiene con las técnicas normales como leer propiedades de un objeto y luego llenar las columnas de un DataRow con ellos y, finalmente, salvar el DataRow en el PP?¿Serialización y deserialización de objetos?

Gracias

+0

Muchas gracias por todas sus respuestas, me puso otra pregunta aquí como un comentario: Leyendo sus respuestas, entonces, ¿cuándo debería ser útil usar la serialización en una aplicación que usa DB? – odiseh

Respuesta

1

serialización es, por lo general, el proceso de escribir el estado de un objeto en el tiempo de ejecución para el disco (pero puede estar en cualquier lugar), y ser capaz de leerlo de nuevo.

Efectivamente, el almacenamiento de las propiedades de un objeto en una tabla es una forma de serialización.

En .NET, hay otras formas:

  • XmlSerialization
  • BinarySerialization

Usted puede hacer su propio.

Pero en general, si está guardando el estado de su objeto en alguna parte, y luego lo vuelve a leer en un objeto 'activo' en su tiempo de ejecución, lo está serializando.

+2

La serialización no significa necesariamente escribirla en el disco. Simplemente significa ponerlo en algún formato binario que pueda exportarse. Un objeto serializado puede enviarse a través de la red en lugar de escribirse en el disco, por ejemplo. – Chuck

+0

Sí, es por eso que en la parte inferior escribí 'en algún lugar'. Me perdí un 'generalmente' en la primera oración. Tienes razón, por supuesto. –

14

La serialización generalmente se refiere a crear una versión de los datos (en lugar de los objetos) que se pueden usar para almacenar (quizás en un archivo), para transferir a través de una red, o simplemente para transferir entre procesos/AppDomain s/etc. en una sola máquina.

Serialización normalmente significa escribir los datos como una cadena (pensar: xml/json) o como binario sin formato (un byte[] etc.). La deserialización es el proceso inverso; tomar los datos brutos (de un archivo, desde un socket de red entrante, etc.) y reconstruir el modelo de objetos.

La diferencia entre usar un db es que no tiene un diseño tabular intrínseco y no tiene una conexión real con una base de datos; los datos pueden ser de cualquier forma y tienden a correlacionarse más estrechamente con el diseño orientado a objetos que con la naturaleza de filas/columnas de las tablas.

mayoría de las plataformas tienen una gama de herramientas de serialización. Por ejemplo, suena como si estuvieras hablando de .NET, entonces BinaryFormatter (.NET-specific), XmlSerializer, DataContractSerializer, Json.NET y protobuf-net/dotnet-protobufs calificarían todos.

5

serialización = poner el estado correspondiente del objeto en una representación en flujo continuo. Eso puede significar convertirlo en un flujo de bytes. Esto no incluye necesariamente copiar cada variable miembro en la secuencia. El ejemplo clásico que utiliza Joshua Bloch en Effective Java es un HashSet. Simplemente serializaría los elementos en el Hashset pero no las claves.

Deserialización = restauración de un objeto a partir de una representación en serie y garantía de las invariantes del objeto. La deserialización puede pensarse en un constructor separado para el objeto. En el caso de la HashSet se mencionó anteriormente, se crearía un nuevo HashSet y luego insertar los valores de la corriente en esta nueva estructura de datos.

+0

upvoted para consejos etimológicos. La serialización trae un objeto * árbol * (jerárquico) en una representación en serie (plana), sin perder semántica. –

+0

No tiene nada que ver con la condensación o no de un 'árbol' a una representación 'plana'. Puede serializar a una base de datos que todavía está en formato de árbol, y deserializar fuera de eso. No es relevante. –

+0

No creo que, en general, una versión db sea una versión en serie de un objeto. Los datos contenidos en un objeto se pueden dividir en varias tablas. La idea de la serialización es crear una representación que pueda transferirse bit por bit (es decir, en serie). – jens

3

Serialización significa que persiste su objeto en una representación, que puede almacenar en alguna parte. Una forma de hacerlo es sólo para tomar la indicación del lugar donde el objeto se almacena en la memoria y escribir cada byte como lo es para un archivo.Como esa representación es muy específica para su lenguaje de programación (y cómo representa los objetos en la memoria), una mejora sería convertir su objeto en una representación de Cadena que tenga una cierta estructura bien conocida (como XML o JSON), de modo que puede

a) transferir más fácil b) tienda

y restaurarla más fácil

c) Como todo el mundo sabe cómo se define el formato, cualquier otro programa puede leer su objeto, también

Así ponerle objetos en una base de datos es solo otra forma de serialización también.

Deserialización significa que puede cargar/restaurar ese objeto nuevamente desde donde lo guardó.

0

serialización

serialización es el proceso de convertir un objeto o un conjunto de objetos gráfico en una corriente.

deserialización

deserialización es el proceso de convertir de nuevo la corriente en un objeto o un conjunto de gráfico de objetos.

Aquí está la atribuye alguna costumbre:

[OnDeserialization] -> Se utiliza cuando tenemos que realizar alguna acción durante la deserialización de la corriente. [OnDeserialized] -> Se usa cuando necesitamos realizar alguna acción después de deserializar la secuencia en un objeto. Como la creación de valor de campo de objeto correctamente

A continuación se muestra el ejemplo

[Serializable] 
    internal class DemoForSerializableAndDeserializable 
    { 
     internal string Fname = string.Empty; 
     internal string Lname = string.Empty; 

     internal Stream SerializeToMS(DemoForSerializableAndDeserializable objDemo) 
     { 
      DemoForSerializableAndDeserializable objSer = new DemoForSerializableAndDeserializable(); 
      MemoryStream ms = new MemoryStream(); 
      BinaryFormatter bf = new BinaryFormatter(); 
      bf.Serialize(ms, objSer); 
      return ms; 
     } 

     [OnDeserializing] 
     private void OnDeserializing(StreamingContext context) 
     { 
      // Do some work while deserializing the stream 
     } 
     [OnDeserialized] 
     private void OnSerialized(StreamingContext context) 
     { 
      Fname = "abc"; 
     } 

    } 

Llamar código

class CallingCode 
    { 
     string fname = string.Empty; 
     string Lname = string.Empty; 

     static void Main(string[] args) 
     { 
      DemoForSerializableAndDeserializable demo = new DemoForSerializableAndDeserializable(); 

      Stream ms = demo.SerializeToMS(demo); 
      ms.Position = 0; 

      DemoForSerializableAndDeserializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializableAndDeserializable; 

      Console.WriteLine(demo1.Fname); 
      Console.WriteLine(demo1.Lname); 
      Console.ReadLine(); 
     } 

    } 
Cuestiones relacionadas