私は次のクラスを持っています:
[Serializable]
public class ExtendedAddressData
{
public String AddressLine1 { get; set; }
public String AddressLine2 { get; set; }
public String Country { get; set; }
public String City { get; set; }
public String Firstname { get; set; }
public String Surname { get; set; }
public String FakeField { get; set; }
}
[Serializable]
public class AddressData
{
public String AddressLine1 { get; set; }
public String AddressLine2 { get; set; }
public String Country { get; set; }
public String City { get; set; }
public String ZipCode { get; set; }
public String Firstname { get; set; }
public String Surname { get; set; }
}
わずかに異なるクラスでシリアライズされているにもかかわらず、古い AddressData が将来もデシリアライズ可能であることを確認しようとしています。
基本的に、空の (存在しない) フィールドは空白にし、削除されたフィールドは忘れる必要があります。
Object から Byte[] (およびその逆) にシリアル化しています。XML や JSON ではなく
private static byte[] ObjectToByteArray(object _Object)
{
try
{
var memoryStream = new MemoryStream();
new BinaryFormatter().Serialize(memoryStream, _Object);
return memoryStream.ToArray();
}
catch (Exception e)
{
Console.WriteLine("Exception caught in process: {0}", e);
}
return null;
}
private static object ByteArrayToObject(byte[] aBytes)
{
try
{
var memoryStream = new MemoryStream(aBytes);
var serializedObject = new BinaryFormatter().Deserialize(memoryStream);
return serializedObject;
}
catch (Exception e)
{
Console.WriteLine("Exception caught in process: {0}", e);
}
return null;
}
これは、おそらく私ができるよりもうまくやろうとしていることを説明する単純化されたUnitTestです
public void LegacySerializationSupportTest()
{
var realData = new AddressData()
{
AddressLine1 = "AddressLine1",
AddressLine2 = "AddressLine2",
City = "City",
Country = "Country",
Firstname = "Firstname",
Surname = "Surname",
ZipCode = "ZipCode"
};
var bytearray = AddressRepository_Accessor.ObjectToByteArray(realData);
AddressData realObject = (AddressData) AddressRepository_Accessor.ByteArrayToObject(bytearray);
ExtendedAddressData fakeObject = (ExtendedAddressData) AddressRepository_Accessor.ByteArrayToObject(bytearray);
Assert.AreEqual(realObject.AddressLine1,fakeObject.AddressLine1);
}
JSON や XML の代わりに bytearray を使用してこれを行う方法はありますか?