Требуется ли для сериализации XML свойства для чтения / записи? - PullRequest
3 голосов
/ 20 июля 2009

Я тестирую сериализацию XML в своем классе, но я заметил, что идентификационный номер не был сохранен при запуске программы.

Итак, я искал и модифицировал несколько вещей, но ничего не получалось, потом я увидел, что все поля, кроме ID, имеют свойства get и set. Итак, я добавил набор; собственность на мой идентификационный номер и пуф это сработало. Вопрос в том, нужно ли это устанавливать; и получить; функция для всех моих свойств для сериализации XML для работы?

Я не хочу, чтобы идентификационный номер изменялся после создания объекта (он автоматически создается).

Ответы [ 2 ]

5 голосов
/ 20 июля 2009

Да, это в основном ограничение сериализации XML. Из документов XML Serialization :

Только публичные свойства и поля могут быть сериализованным. Свойства должны иметь общедоступные (получить и установить методы). Если вы должны сериализовать непубличные данные, используйте Класс BinaryFormatter, а не XML сериализации.

Сериализация XML не так гибка, как хотелось бы.

1 голос
/ 20 июля 2009

Обратите внимание, что если вы хотите сериализовать непубличные данные в формате xml, DataContractSerializer может быть полезным. Он не такой гибкий, как XmlSerializer (и вы не можете указать атрибуты), но он может сериализовать непубличные данные:

[DataContract]
public class Person {
    [DataMember]
    private int id;

    public int Id {get {return id;}} // immutable

    public Person(int id) { this.id = id; }

    [DataMember]
    public string Name {get;set;} // mutable
}

Обратите также внимание, что он не использует ваш конструктор ... или действительно любой конструктор - он обманывает, позволяя ему создать объект и впоследствии заполнить данные.

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