2011-06-25 19 views
5

para serializar una clase con protobuf-net, que neet para proporcionar la clase y atributos de propiedad [ProtoContract] y [ProtoMember (n)] -, donde n es 1,2,3, .., etcEn Protobuf-net, ¿es posible serializar clases no decoradas?

Appart de la clonación a una imagen espejo de una clase, ¿es posible serializar/deserializar una clase sobre la que no tenemos control?

Por ejemplo:

usando ProtoBuf;

  • Serializer.Serialize < Excepción > (OutputStream, excepción);

o

  • Serializer.Serialize < Tuple < de datos, Excepción > > (OutputStream, dataWithPossibleException);

NB. dicen que Data tiene [ProtoContract]/[ProtoMember] y los otros no.

enfoques posibles:

  • Sería bueno si tuviéramos "atributos" de extensión que funcionaban como los métodos de extensión. [No es posible]
  • replicar la clase a nivel local y luego copiar a/desde el objeto antes de serializar/deserializar [que funcionaría, pero la productividad se cae]
  • generar un archivo proto/definición externa para la clase y almacenar esto en recursos? [Alguien sabe cómo hacer esto?]

Respuesta

3

Hay opciones en v2 aquí:

  • puede configurar un RuntimeTypeModel diciéndole acerca de los tipos y miembros sin necesitar ningún atributo
  • para los tipos que son torpes, se puede suministrar un sustituto para facilitar la serialización (debe tener operadores de conversión a/del tipo original)
  • para las API donde los tipos no están estáticos, hay una opción para incluir los metadatos de tipo

Ahora, creo que algunos de los que se ocupa de algunos de sus puntos. Si puede especificar completamente un escenario problemático, podría ser más específico (o pensar en nuevas formas de torturar el código para que funcione).

Pero para responder la pregunta principal (no decorado): sí, en v2

+0

¡Gracias por anticipar esta necesidad! Tomé la opción sustituta por el momento, en que descompilé las pequeñas clases de framework y las puse en mi ensamblado. Sobre todo, intento adherirme a POCO, por lo que una única vez como esta no es un gran problema. Veré las nuevas opciones de la versión 2. – sgtz

+0

@sgtz el método SetSurrogate debería hacer que más directa y conveniente –

+0

por cierto: tenía una versión ligeramente mayor de v2. Entonces, pulso update en svn, y ahora puedo serializar/deserializar >. Además, tuve que eliminar + leer el binario de protobuf-net. No estoy seguro de qué fue eso, pero está funcionando bien ahora.Gracias por hacer público este proyecto ... y también, gracias a Google. Debo mencionar que en este punto, estoy * todavía * usando mi copia de Tuple, no la que está en el espacio de nombres del sistema. – sgtz

Cuestiones relacionadas