Question

Comme indiqué dans Est-ce que l'ordre des champs dans la matière C #? , l'ordre des propriétés sérialisables affecte, entre autres, la sortie XmlSerializer.

Mais si les champs sont en 2 fichiers (à l'aide des classes partielles), personne ne sait ce qui en fait contrôle l'ordre qui en résulte? C'est, les propriétés du fichier vient en premier?

(arrière-plan. Je demande parce que j'ai couru dans un scénario où l'un des 2 fichiers est généré automatiquement à partir xsd, et l'autre est modifié manuellement la sortie de test est différent sur les boîtes de développement par rapport à notre version scénarisée boîte. On peut supposer que cela est un effet secondaire des plusieurs différences dans le calendrier et l'histoire de la xsd-> C # étape dans les 2 environnements. façons différentes pour réparer, mais je voudrais comprendre le processus de compilation un peu mieux si possible. )

Était-ce utile?

La solution

Rien est garanti par spec C #.

Autres conseils

J'ai trouvé que l'utilisation de l'approche « facile » de faire un objet en le marquant [Serializable] est généralement assez bon pour les implémentations très simples.

Je recommande que vous implémentez l'interface IXmlSerializable qui est assez facile à faire et vous donne tout le contrôle dont vous avez besoin.

Voici ce que nous avons découvert par la solution d'un vilain bug:

Nous avons eu exactement le même problème, notre ordre de sérialisation a changé après une libération sans modifier l'une des classes liées à la sérialisation.

Nous avions une moitié d'une classe générée par xsd-s, et l'autre moitié était faite à la main. Les attributs d'ordre étaient effet moins. Ce que nous avons vu était que, avant la libération, les pièces partielles faites à la main ont été sérialisés d'abord, et après l'ordre a changé.

La solution était dans le ordre des fichiers dans le fichier de projet , qui contenait les deux classes. Il est avéré que, après un MSBuild (sur notre serveur de build) construire, le sérialiseur mettra les éléments de la première (dans le csproj) fichier « .cs » d'abord dans le XML sérialisé. Modification de l'ordre des fichiers « .cs » dans le csproj a troqué l'ordre et les pièces produites étaient à l'avant, au besoin dans le fichier XML.

Il est est conforme à la réponse et l'observation d'Eric Hirst ci-dessus, de renommer le fichier réordonne les éléments du csproj (ils sont généralement dans l'ordre alphabétique). Attention pour l'édition du csproj à la main pour cette raison aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top