У меня есть пользовательский элемент управления с двумя свойствами, которые подходят для моей текущей проблемы. int NumberOfColumns и строку AssignedLabels. NumberOfColumns настраивает количество столбцов панели tablelayout. AssignedLabels будет строкой, разделенной CRLF, для присвоения значений меткам, содержащимся в TableLayoutPanel. Когда строка AssignedLabels разбивается по CRLF и количество элементов массива не соответствует текущему значению NumberOfColumns, назначения не выполняются.
Дизайнер сериализует все в алфавитном порядке... поэтому AssignedLabels< /code> будет первым, а NumbersOfColumns вторым. Значением по умолчанию для NumberOfColumns является 8.
Если я установлю количество столбцов равным 2 в дизайнере и назначу ему метки, он будет сериализован правильно:
Код: Выделить всё
x.AssignedLabels = "Yes\r\nNo";
x.NumberOfColumns = 2;
Но при десериализации сначала считывается свойство AssignedLabels, а в это время NumberOfColumns по-прежнему является значением по умолчанию (8), и поэтому никакие назначения не будут выполняться. быть сделано, поскольку разделенная строка не соответствует количеству столбцов.
Конечно, я мог бы переименовать NumberOfColumns во что-то вроде AaaaaaaNumberOfColumns, чтобы сначала он был сериализован, но это немного хакерски. Существуют ли какие-либо атрибуты для управления порядком сериализации или другой более прозрачный подход к решению этой проблемы?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... tion-order