C# 数据协定序列化和前后兼容

C# 数据协定序列化和前后兼容,c#,wcf,asp.net-web-api,C#,Wcf,Asp.net Web Api,在一个C#项目中,我在一个复杂实体的web api中使用数据契约序列化。 在创建或更改可序列化类型时,哪种策略是保持向后和向前兼容性的好策略? 例如,我可以添加一些新属性或更改一些字段名。记住一些事情会有所帮助,这些对于任何语言的任何序列化都是通用的: 从长度开始,这样代码就可以始终获得记录,即使它不理解所有记录 包括格式的版本号-这样,如果您必须破坏兼容性,您可以优雅地处理它 总是在结尾处扩展枚举-绝对/强>在开始或中间。 仅在末尾添加新字段 如果必须有任何可变长度字段,则将长度单独存储在字段

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

记住一些事情会有所帮助,这些对于任何语言的任何序列化都是通用的:

  • 从长度开始,这样代码就可以始终获得记录,即使它不理解所有记录
  • 包括格式的版本号-这样,如果您必须破坏兼容性,您可以优雅地处理它
  • 总是在结尾处扩展枚举-<强>绝对/强>在开始或中间。
  • 仅在末尾添加新字段
  • 如果必须有任何可变长度字段,则将长度单独存储在字段之前,或作为字段中的第一个字节
  • 通过使用指定字节顺序的固定长度整数,允许不同的整数长度和字节顺序
  • 尽量避免使用位字段-位顺序和填充通常未定义
  • 不要假设任何事情
  • 把所有的东西都写下来并发表
  • 先把它写下来,然后试着去做,如果必要的话,纠正它
  • 测试,测试,测试-编写和提供修订测试,最好是跨平台、跨版本、跨语言
  • 考虑到未来,例如Unicode、新体系结构等
  • 看看别人都做了些什么,并从中吸取教训

  • 添加一些特定于C#/VB/.Net的链接,以保留OPs注释中的链接-&-注意,这些链接受MSDN的影响,因此可能会消失或移动。

    谢谢。有了你的解释,我发现这正是我所需要的。