2010-05-23 25 views
14

He estado leyendo sobre protobuf-net y ¡es increíble!¿Hay algún Tutorial para Protobuf-net?

¿Hay algún tutorial que pueda usar? (Más específicamente para Dictionary<TKey,TValue> y contratos para genéricos)

¿Hay algún consejo asociado con esto?

¿Podría simplemente conectarlo a mi código actual o hay algún cambio que deba hacer?

+0

¿Puede decirnos algo más sobre lo que hace actualmente su código base? – Carlos

Respuesta

14

Dictionary<TKey,TValue> debería funcionar en gran medida (en "v1" al menos, aún no lo he escrito para "v2").

Admito plenamente que la documentación es ... escasa. Cosas que saltan a la mente:

  • Getting Started (y hay algunas otras páginas de la wiki)
  • hay un anfitrión de cosas en el trunk; el proyecto "Ejemplos" funciona como la unidad de pruebas, por lo que puede ayudar a
  • my blog

que tienen una gran cantidad ocurriendo en el momento (He puestos de trabajo acaba de cambiar, etc), pero mis prioridades son :

  • conseguir un "v2" estable en forma beta en libertad, al menos, la característica central establece
  • mejorar la documentación

El tiempo es mi mayor enemigo. Pero si tienes un escenario específico, no dudes en hacernos un seguimiento y trataré de responderte cuanto antes.

Re "puedo simplemente enchufarlo"; eso depende de su código ;-p

Necesita alguna manera de determinar un número único para cada miembro que desea serializar.La forma más sencilla de hacerlo es a través de los atributos; admite cualquiera de [XmlElement(Order=n)], [DataMember(Order=n)] o [ProtoMember(n)]. Si ya tiene al menos uno de estos (LINQ-to-SQL incluye [DataMember], por ejemplo), entonces simplemente puede funcionar.

Existen opciones para inferir automáticamente los números, pero eso es frágil y no se recomienda. Solo use esto si sabe que nunca necesita agregar más miembros (los ordena alfabéticamente, por lo que agregar un nuevo AardvarkCount lo romperá todo).

En "v2" (inédito, pero funciona), ahora puede manejar los metadatos independientemente de los tipos, es decir, puede usar protobuf-net con POCO, tipos no atribuidos. También puede omitir los constructores, etc. (estilo WCF). Mucho más flexible, si lo quieres. El enfoque de atributo también es compatible, por supuesto.

+0

Hola gracias Marc. Entonces, usando el diccionario funciona en v1 y v1 está listo para producción ¿no? Realmente no tengo ninguna restricción para usar la última versión ni nada. Lo único es, ¿funciona en .net 4.0? ¿Y cómo es seguro el hilo? – akshaykarthik

+0

@AKRamkumar "v1" es de hecho la versión disponible para descargar como un dll precompilado. Debería ser completamente seguro para subprocesos y debería funcionar bien en .NET 4.0. La versión "v2" tiene muchas ventajas, pero no es esencial cambiar, son totalmente compatibles con los cables. –

+0

¿Entonces el uso del Diccionario funcionaría en v2? ¿Algún tipo para TKey o TValue funcionaría o estaría restringido a tipos específicos? (Lo siento si sueno noobish, no soy tan bueno como programador) – akshaykarthik

2

Curiosamente, acabo de responder otra pregunta con un enlace a protobuf-net.

Me pareció relativamente fácil de hacer, y Marc es muy receptivo por correo electrónico. (Jeje, lo siento si estoy invitando a la gente a que te envíe spam con preguntas!)

Para la documentación, mencioné que era un poco escaso. Pero esto es lo que lo estaba usando para:

Tenía un sistema de mensajería basado en XML que era un poco demasiado detallado. Así que quería reemplazar los mensajes con algo que codificaría la misma información, pero mucho más compacto. Protobuf-net resultó ser perfecto para esto, y no he reemplazado mi módulo basado en xmlserialzer con uno basado en proto.

Era bastante simple. Revisé mi proyecto, reemplazando [XmlInclude] y atributos similares con [ProtoInclude], y por supuesto reemplacé el serializador xml con el proto serializador. Uno o dos problemas con respecto a qué tipos se podían serializar se resolvieron con la ayuda de Marc, y no con mucha refactorización del código.

Cuestiones relacionadas