私は通常、コードのすべての部分を 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 プロトコル/シリアライゼーションを作成し、上記のようにシリアライゼーションを詳細に説明できるようにするための最良の方法は何ですか?