Почему Xml Serializer требует, чтобы свойства были доступны для записи? - PullRequest
1 голос
/ 23 февраля 2011

У меня есть некоторые типы, которые я хочу сериализовать как XML, но эти типы имеют свойства только для чтения, такие как:

public List<Effect> Effects {get; private set;}

но сериализатор xml требует, чтобы эти свойства были доступны для записи.

  1. Разве XML-сериализатор не использует отражение, поэтому в действительности можно легко установить эти свойства с помощью отражения, даже если они доступны только для чтения?

  2. Есть ли способ обойти это, потому что я не хочу, чтобы эти типы редактировались людьми, поэтому свойства должны быть доступны только для чтения, но я также хочу, чтобы они были сериализуемыми в xml.

1 Ответ

1 голос
/ 23 февраля 2011

Это невозможно, потому что, как упоминалось в MSDN

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

Но вы можете использовать DataContractSerializer.Вот ссылка на ответ Марка на SO

Сериализация личных данных члена

Обновление

Вы можете преодолеть это поведениеоставив автоматически реализованные свойства и что-то вроде этого:

 private List<Effect> _Effects;  

 public Effect()  
 {  
     _Effects= new List<Effects>();  
 }  

 public List<Effect> Effect
 {  
    get  
     {  
        return _Effects;         
     }  
 }  
...