Я обычно пишу все части кода на С#, а при написании протоколов, которые сериализованы, я использую FastSerializer, который сериализует/десериализует классы быстро и эффективно. Он также очень прост в использовании и довольно прямолинейный, чтобы выполнять "управление версиями", то есть обрабатывать разные версии сериализации. То, что я обычно использую, выглядит так:
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>();
}
и
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);
}
Таким образом, его легко добавить новые вещи или полностью изменить сериализацию, если вы решите.
Однако теперь я хочу использовать JSON по причинам, не имеющим значения прямо здесь =) В настоящее время я использую DataContractJsonSerializer, и теперь я ищу способ иметь ту же гибкость, что и у FastSerializer выше.
Итак, вопрос: что является лучшим способом для создания протокола JSON/сериализации и для детализации сериализации, как описано выше, так что я не нарушаю сериализацию только потому, что другой компьютер еще не обновил свою версию?