У меня возникла проблема с внедрением механизма IsDirty
с моей системой XmlSerializer
.Все мои флаги IsDirty установлены в true после чтения в XML-файле с использованием XmlSerializer
Это как называется моя сериализации:
public OCLMEditorModel()
{
DeSerialize();
}
public void Serialize()
{
XmlSerializer x = new XmlSerializer(_ModelData.GetType());
using (StreamWriter writer = new StreamWriter(_strPathModelDataXml))
{
x.Serialize(writer, _ModelData);
}
}
public void DeSerialize()
{
_ModelData = new OCLMModelData();
XmlSerializer x = new XmlSerializer(_ModelData.GetType());
using (StreamReader reader = new StreamReader(_strPathModelDataXml))
{
_ModelData = (OCLMModelData)x.Deserialize(reader);
}
}
Он читает и сохраняет отлично, никаких проблем нет. Но это флаг IsDirty
, с которым у меня проблемы. Непосредственно после вызова десериализации ...
попки IsDirty значение истина. Хотя все, что мы сделали, читается с компьютера. Свойства примера:
public class MaterialItem
{
[XmlAttribute]
public string Setting
{
get { return _Setting; }
set
{
_Setting = value;
MarkDirty();
}
}
private string _Setting;
[XmlText]
public string Material
{
get { return _Material; }
set
{
_Material = value;
MarkDirty();
}
}
private string _Material;
[XmlIgnore]
public bool IsDirty { get { return _isDirty; } }
private bool _isDirty;
public void MarkClean()
{
_isDirty = false;
}
protected void MarkDirty()
{
_isDirty = true;
}
public MaterialItem()
{
MarkClean();
}
}
В идеале флаг должен быть ложным, когда мы только что прочитали его, используя XMLSerializer.
Что я делаю неправильно?
спасибо.
Когда объект в настоящее время десериализации, он устанавливает вызывается значение свойства и в устройстве свойств, 'MarkDirty()', которое отмечает все как грязное. –
шаг за кодом и посмотреть, что он делает или не делает то, что вы ожидаете – MethodMan