Normalmente escribo todas las partes del código en C# y cuando escribo protocolos serializados utilizo FastSerializer que serializa/deserializa las clases de forma rápida y eficiente. También es muy fácil de usar, y bastante directo para hacer "versiones", es decir, para manejar diferentes versiones de la serialización. Lo que normalmente uso, se ve así:¿Cuál es la mejor forma de manejar versiones utilizando el protocolo JSON?
public override void DeserializeOwnedData(SerializationReader reader, object context)
{
base.DeserializeOwnedData(reader, context);
byte serializeVersion = reader.ReadByte(); // used to keep what version we are using
this.CustomerNumber = reader.ReadString();
this.HomeAddress = reader.ReadString();
this.ZipCode = reader.ReadString();
this.HomeCity = reader.ReadString();
if (serializeVersion > 0)
this.HomeAddressObj = reader.ReadUInt32();
if (serializeVersion > 1)
this.County = reader.ReadString();
if (serializeVersion > 2)
this.Muni = reader.ReadString();
if (serializeVersion > 3)
this._AvailableCustomers = reader.ReadList<uint>();
}
y
public override void SerializeOwnedData(SerializationWriter writer, object context)
{
base.SerializeOwnedData(writer, context);
byte serializeVersion = 4;
writer.Write(serializeVersion);
writer.Write(CustomerNumber);
writer.Write(PopulationRegistryNumber);
writer.Write(HomeAddress);
writer.Write(ZipCode);
writer.Write(HomeCity);
if (CustomerCards == null)
CustomerCards = new List<uint>();
writer.Write(CustomerCards);
writer.Write(HomeAddressObj);
writer.Write(County);
// v 2
writer.Write(Muni);
// v 4
if (_AvailableCustomers == null)
_AvailableCustomers = new List<uint>();
writer.Write(_AvailableCustomers);
}
Así que es fácil de agregar cosas nuevas, o cambiar la serialización por completo si se opta.
Sin embargo, ahora quiero usar JSON por razones que no son relevantes aquí =) Actualmente estoy usando DataContractJsonSerializer y ahora estoy buscando una manera de tener la misma flexibilidad que he utilizando el FastSerializer anteriormente.
Así que la pregunta es; ¿Cuál es la mejor manera de crear un protocolo/serialización JSON y poder detallar la serialización como arriba, para que no rompa la serialización solo porque otra máquina aún no ha actualizado su versión?
Estoy escribiendo en C#, pero la implementación debería ser posible en cualquier idioma, de lo contrario, se pierde el punto entero ... – Ted
+1 para un buen consejo! – Ted