Как лучше всего управлять версиями с использованием протокола JSON?

Обычно я пишу все части кода на C#, а при написании сериализованных протоколов я использую 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 и иметь возможность детализировать сериализацию, как указано выше, чтобы я не нарушил сериализацию только потому, что другая машина еще не обновила свою версию?

45
задан Ted 6 April 2012 в 11:20
поделиться