Сериализация / десериализация объектов - порядок полей имеет значение? - PullRequest
6 голосов
/ 19 июля 2010

Возможно ли, что DataContractSerializer ошибочно десериализует объект, если поля не в "правильном" (что бы это ни значило) порядке?

У классов, которые я пытаюсь сериализовать / десериализовать, нет атрибутов порядка, размещенных в полях / свойствах.Тем не менее, одно из моих полей всегда десериализуется как null, даже если оно имеет ненулевое значение (оно фактически содержит список строк).

Когда я перемещал два XML-элемента в сериализованном файле, чтобы соответствоватьВ другом примере XML (для которого десериализация работала без проблем) все начало работать.

Это не имеет смысла для меня, но, возможно, кто-то знает лучше.;)

1 Ответ

15 голосов
/ 19 июля 2010

Чтобы иметь право на правильную сериализацию / сериализацию DataContractSerializer, все следующее должно быть верно.

  1. Для класса, который должен быть сериализован, должен быть установлен SerializableAttribute или DataContractAttribute;
  2. Для свойств и полей класса, который должен быть сериализован, требуется набор DataMemberAttribute;
  3. Тип данных сериализуемого свойства или поля должен быть сериализуемым (т. Е. Иметь открытый ctor и наследовать ISerializable);
  4. Класс, который должен быть сериализован, должен реализовывать IExtensibleDataObject;
  5. Примечание: сериализуемые поля могут быть открытыми или закрытыми.
  6. Члены должны быть в алфавитном порядке , или вы должны использовать Order -property из DataMemberAttribute.

Итак, порядок объявления имеет значение .Если члены не в алфавитном порядке, они пропускаются.Посмотрите этот ответ в StackOverflow для примера , возможно, он применим к вашему делу.

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