Je suis normalement écrit de toutes les parties du code en C# et lors de la rédaction des protocoles qui sont sérialisés-je utiliser FastSerializer qui sérialise/désérialise les classes rapide et efficace. Il est également très facile à utiliser, et assez simple à faire "versioning", c'est à dire de gérer les différentes versions de la sérialisation. La chose que j'ai l'habitude d'utiliser, ressemble à ceci:
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>();
}
et
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);
}
Donc facile d'ajouter de nouvelles choses, ou de modifier la sérialisation complètement si l'on choisit de le faire.
Cependant, je veux maintenant utiliser JSON pour des raisons qui ne sont pas pertinentes ici =) je suis actuellement en utilisant DataContractJsonSerializer et je suis maintenant à la recherche d'un moyen d'avoir la même souplesse que j'ai à l'aide de la FastSerializer ci-dessus.
Donc la question est: quelle est la meilleure façon de créer un protocole JSON/de sérialisation et d'être en mesure de détailler la sérialisation comme ci-dessus, de sorte que je ne vous cassez pas la sérialisation juste parce que l'autre machine n'a pas encore mis à jour leur version?