c# – 序列化类似的类
发布时间:2020-12-15 21:37:47 所属栏目:百科 来源:网络整理
导读:我有以下课程: [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
我有以下课程:
[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); } 有什么方法可以做到这一点,仍然使用bytearray而不是JSON或XML? 解决方法
我同意詹姆斯的观点.如果旧类和新类都从同一个父类继承,那么它不仅仅是一个架构的东西(DRY原则),你可以完成工作.在父类上创建一个序列化程序,它将为一个类中的缺失值输出“null”值,甚至不包含要排除的另一个字段中的字段.然后在父类而不是派生类上调用序列化器,所有内容最终都会看起来相同.
在子类上,你仍然需要弄清楚你想用新的序列化格式中包含的值做什么(即你的代码的其余部分是否会很高兴得到一个带有该字段的类?). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 通过源码编译安装PostgreSQL步骤及问题总结
- c# – 至少1个数字的6个字符以内的弱密码
- postgresql 查看数据库,表,索引,表空间以及大小
- Sqlite LIMIT/OFFSET查询
- 对PostgreSQL的GEQO(遗传查询优化)的修改
- ruby-on-rails – Capybara webkit不会从有角度传递params
- c# – 如何处置Task中使用的MemoryStream?
- 09-Swift中的元组
- Disable XML validation in Eclipse - 解决validation xml慢
- Swift38/90Days - 用 Swift 开发 Mac App 1 / 3