4

正如C# 中的字段顺序是否重要?,可序列化属性的顺序会影响 XmlSerializer 输出等。

但是如果字段在 2 个文件中(使用部分类),有谁知道实际上是什么控制了结果顺序?也就是说,哪个文件的属性先出现?

(背景:我问这个是因为我遇到了一个场景,其中两个文件中的一个是从 xsd 自动生成的,另一个是手动编辑的。开发人员框与我们的脚本构建框的测试输出不同。大概这是两个环境中 xsd->C# 步骤的时间和历史的几个差异的副作用。各种修复方法,但如果可能的话,我想更好地理解编译过程。)

4

3 回答 3

2

C# 规范没有任何保证。

于 2009-03-26T20:24:30.953 回答
2

我发现使用“简单”的方法通过标记对象 [Serializable] 来制作对象通常只适用于非常简单的实现。

我建议您实现 IXmlSerializable 接口,该接口非常容易实现,并为您提供所需的所有控制。

于 2009-04-21T19:39:55.880 回答
1

这是我们通过修复一个讨厌的错误发现的:

我们遇到了完全相同的问题,我们的序列化顺序在发布后发生了变化,而没有修改任何与序列化相关的类。

我们有一半是从 xsd-s 生成的,另一半是手工制作的。订单属性没有影响。我们看到的是,在发布之前,手工制作的部分零件首先是序列化的,然后是顺序发生变化的。

解决方案按项目文件中的文件顺序排列,其中包含两个类。事实证明,在 MSBuild(在我们的构建服务器上)构建之后,序列化程序会将早期(在 csproj 中)“.cs”文件的元素首先放入序列化的 XML 中。更改 csproj 中“.cs”文件的顺序交换了顺序,并且生成的部分在 XML 中根据需要放在前面。

这与上面 Eric Hirst 的回答和观察一致,因为重命名文件会重新排序 csproj 的项目(它们通常按字母顺序排列)。出于这个原因,也要注意手动编辑 csproj。

于 2015-02-08T21:30:37.243 回答