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