4
我有以下類別:序列化相似的類
[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仍是未來deserializable儘管有一個稍微不同的班級正在連載。
基本上空的字段(不存在)應該被刪除,被刪除的字段應該被忘記。
我從對象序列化到字節[](和後面)。不是XML或JSON
這裏是一個簡化的單元測試,可能解釋了什麼是我嘗試比我更可以
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?
你應該介紹一個基本的地址類,並將常用屬性轉儲到其中並保留你的模型[DRY](http://en.wikipedia.org/wiki/Don't_repeat_yourself) – James 2012-07-25 13:35:31
@James:我要去來建議同樣的事情,但是如果底層的序列化對象實際上不是那種類型的話,你仍然會遇到轉換爲子類型的問題以獲得額外的屬性。 – mellamokb 2012-07-25 13:36:36
@mellamokb是的我不認爲這是OP的問題的解決方案,更多隻是一般性的建議。 – James 2012-07-25 13:38:32