Tôi thường viết tất cả các phần của mã trong C# và khi viết các giao thức được tuần tự hóa, tôi sử dụng FastSerializer để tuần tự hóa/deserializes các lớp nhanh và hiệu quả. Nó cũng rất dễ sử dụng, và khá thẳng về phía trước để làm "versioning", tức là để xử lý các phiên bản khác nhau của serialization. Điều tôi thường sử dụng, trông như thế này:Cách tốt nhất để xử lý phiên bản bằng giao thức JSON là gì?
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>();
}
và
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);
}
Vì vậy, nó dễ dàng để thêm những điều mới, hoặc thay đổi serialization hoàn toàn nếu ta chọn để.
Tuy nhiên, bây giờ tôi muốn sử dụng JSON vì lý do không liên quan ngay tại đây =) Tôi hiện đang sử dụng DataContractJsonSerializer và bây giờ tôi đang tìm cách có tính linh hoạt tương tự như tôi đã sử dụng FastSerializer ở trên.
Vì vậy, câu hỏi là; cách tốt nhất để tạo ra một giao thức JSON/serialization và để có thể chi tiết serialization như trên, vì vậy mà tôi không phá vỡ serialization chỉ vì một máy khác đã không được cập nhật phiên bản của họ là gì?
Im viết bằng C#, nhưng việc triển khai có thể thực hiện được bằng bất kỳ ngôn ngữ nào, nếu không nó sẽ bị xóa toàn bộ điểm ... – Ted
+1 cho mẹo tốt! – Ted