Проблема:
У меня есть класс, скажем, Foo, который реализует свойство Id. Фу должно быть
сериализации. Foo.Id должен быть инициализирован новым GUID при инициализации
Фу. Идентификатор Foo.Id не должен изменяться после его установки. При десериализации будет пытаться установить Foo.Id, поэтому он должен быть открыт.
Private _Id As String=system.Guid.NewGuid.tostring
Public Property Id As String
Get
return _Id
End Get
Set(ByVal value As String)
_Id = value
End Set
End Property
или для клиентов # 1008 *
private string _Id = system.Guid.NewGuid().ToString();
public string Id {
get { return _Id; }
set { _Id = value; }
}
Решение Мысли:
Единственное решение, по-видимому, заключается в создании исключения времени выполнения при установке Foo.Id, но
это вызовет проблемы при десериализации. Итак, как-то мы должны сделать
убедитесь, что исключение выдается только тогда, когда попытка Set Foo.Id
сделано вне сериализатора. Какой-то флаг или что-то в конструкторе?
Редактировать, метод десериализации ...
public static Foo DeserializeFromFile(string sFilespec)
{
Xml.Serialization.XmlSerializer oSerializer = new Xml.Serialization.XmlSerializer(typeof(Foo));
System.IO.FileStream oStream = new System.IO.FileStream(sFilespec, IO.FileMode.Open);
Foo oObject = oSerializer.Deserialize(oStream);
oStream.Close();
return oObject;
}