Что управляет порядком сериализации XML частичных классов C #? - PullRequest
4 голосов
/ 26 марта 2009

Как обсуждено в Имеет ли значение порядок полей в C #? , порядок сериализуемых свойств влияет, среди прочего, на вывод XmlSerializer.

Но если поля находятся в 2 файлах (с использованием частичных классов), кто-нибудь знает, что на самом деле контролирует результирующий порядок? То есть какие свойства файла стоят на первом месте?

(Предыстория: я спрашиваю об этом, потому что столкнулся со сценарием, в котором один из двух файлов автоматически создается из xsd, а другой редактируется вручную. Результаты теста отличаются на блоках разработчика и нашей скриптовой сборке предположительно, это побочный эффект нескольких различий во времени и истории шага xsd-> C # в двух средах. Различные способы исправления, но я хотел бы немного лучше понять процесс компиляции, если это возможно. )

Ответы [ 3 ]

2 голосов
/ 21 апреля 2009

Я обнаружил, что использование «простого» подхода к созданию объекта с помощью пометки [Serializable] обычно достаточно только для очень простых реализаций.

Я бы порекомендовал вам реализовать интерфейс IXmlSerializable, который довольно прост и дает вам все необходимое управление.

2 голосов
/ 26 марта 2009

Ничто не гарантируется согласно спецификации C #.

1 голос
/ 09 февраля 2015

Вот что мы обнаружили благодаря исправлению неприятной ошибки:

У нас была точно такая же проблема, наш порядок сериализации изменился после выпуска без изменения какого-либо из классов, связанных с сериализацией.

У нас была одна половина класса, сгенерированная из xsd-s, а другая половина была сделана вручную. Атрибуты заказа были без эффекта. То, что мы увидели, было то, что перед выпуском детали, изготовленные вручную, были сначала сериализованы, а после этого порядок изменился.

Решение было в порядке файлов в файле проекта , который содержал два класса. Оказалось, что после сборки MSBuild (на нашем сервере сборки) сериализатор поместит элементы более раннего (в csproj) файла ".cs" первыми в сериализованный XML. Изменение порядка файлов ".cs" в csproj поменяло местами порядок, и сгенерированные части были в порядке, необходимом для XML.

Это согласуется с ответом и наблюдением Эрика Херста выше, поскольку переименование файла переупорядочивает элементы csproj (они обычно в алфавитном порядке). По этой причине также следите за редактированием csproj вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...