数据合同序列化和向后兼容性

时间:2013-12-09 08:57:24

标签: c# wcf asp.net-web-api

在C#项目中,我在web api中使用Data Contract序列化来表示复杂的实体。 在创建或更改可序列化类型时,哪个是保持向后和向前兼容性的好策略? 例如,我可以添加一些新属性或更改一些字段名称。

1 个答案:

答案 0 :(得分:1)

记住一些事情可以提供帮助,这对于几乎任何语言的任何序列化都是通用的:

  1. 从长度开始,这样你的代码就可以随时获取记录,即使它不能理解所有记录。
  2. 包含格式的版本号 - 如果你必须打破兼容性,你可以优雅地处理它。
  3. 始终在最后扩展枚举 - 从不在开头或中间。
  4. 仅在最后添加新字段。
  5. 如果您必须有任何可变长度字段,则在字段之前单独存储长度或作为字段中的第一个字节。
  6. 通过使用指定字节顺序的固定长度整数,允许不同的整数长度和字节排序。
  7. 尽量避免使用位域 - 位排序&填充通常是未定义的。
  8. 不要假设任何
  9. 写下所有内容并发布。
  10. 将其写下来首先,然后尝试执行此操作,然后在必要时更正所写内容。
  11. 测试,测试,测试 - 编写了修订测试,最好是跨平台,跨版本,跨语言。
  12. 允许将来,例如Unicode,新架构等
  13. 看看别人做了什么并从中学习。
  14. 添加一些特定于C#/ VB / .Net的MSDN链接,这些链接来自OP评论以保留链接 - Data Contract Versioning& Best Practices: Data Contract Versioning - 请注意,这些链接受MSDN的变幻莫测,因此可能会消失或移动