2015-03-24 2 views
0

У меня есть пользовательский класс со следующими свойствами: «Объект имеет Лидер свойства, которое не имеет никакого публичного набора»Serializer Ошибка

Class Person 
    readonly public string Name; 
    readonly public string FamilyName; 
    readonly public string UserName; 
    private List<Person> Team = new List<Person>(); 
    public Person Leader { get; private set; } 
    public bool HasTeam { get; private set; } 

Я получаю ошибку на сериализатор потому что Однако мне нужно сохранить его закрытым, так как изменение Лидер вызовет ошибки. Вы знаете какой-нибудь способ? Или мне нужно сделать его общедоступным и помнить, что я не могу его установить?

Спасибо, Майкл

+0

'[XmlIgnore() ] возможно, но вы действительно не предлагаете много информации здесь :) – Icepickle

+0

Но таким образом он пропустит его при сохранении/загрузке. :(Мне просто нужно сохранить объект Person при закрытии и загрузить на открытое. – user2868288

+1

Тогда XmlSerializer может и не быть тем, что вам нужно, вам нужно сохранить его в XML или использовать, например, вместо BinaryFormatter (который сериализуется полный объект вместо этого?). Еще один (плохой) вариант может заключаться в том, чтобы проверить установку Лидера, если он еще не установлен, в этом случае установлен, и когда он установлен, выведите ошибку (для чего требуется, чтобы личный личный Лидер подтвердил если он еще не установлен) – Icepickle

ответ

1

Итак, как уже упоминалось, вы могли бы сделать это так, что это может быть установлен только один раз, но я бы не видеть это как хороший вариант (возможно, вам следует скорее пересмотреть как вы хотели бы хранить эту информацию?)

public class Person 
{ 
    private Person leader; 
    public Person Leader 
    { 
     get 
     { 
      return leader; 
     } 
     set 
     { 
      if (Object.Equals(leader, value)) 
      { 
       return; 
      } 
      if (leader != null) 
      { 
       throw new InvalidOperationException("Leader can be set only once!"); 
      } 
      leader = value; 
     } 
    } 
} 

это позволит вам сохранить/загрузить значения, и это не позволит ей установить впоследствии. Тем не менее, это просто работает над проблемой.

В случае, если Вы не должны сохранить его специально для XML, вы могли бы использовать двоичный форматировщик, который сохраняет весь объект Person (независимо от того, если он содержит частные поля/свойства)