将对象与受尊重的xml文档同步

时间:2014-02-15 04:11:04

标签: c# xml object

我正在研究WPF项目,我需要将所有对象存储在本地文件系统中的单独xml文档中。但是现在我每次更改我的对象时都会更新我的xml文档。有没有办法将这些对象与c#中的相应xml文档同步?

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以编写一个接口并在代码中的每个数据对象上实现它。看看下面的代码。您还必须手动调用同步方法,但我认为这是更干净的代码。

public interface IDataChangeHandler
{
    void OnDataChanged(object data, string tag);
}

public class DataObject : IDataChangeHandler
{
    private string _property1;
    public string Property1
    {
        get { return _property1; }
        set
        {
            _property1 = value;
            OnDataChanged(_property1, "property1");
        }
    }

    private int _property2;
    public int Property2
    {
        get { return _property2; }
        set
        {
            _property2 = value;
            OnDataChanged(_property2, "property2");
        }
    }


    public void OnDataChanged(object data, string tag)
    {
        /*write the changes in xml*/
    }
}

答案 1 :(得分:0)

您可以在要在xml中保存的对象的类中实现System.ComponentModel.INotifyPropertyChanged。请参阅以下示例:

public class Class1ToSave : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private int _property1;

    public int Property1
    {
        get
        {
            return _property1;
        }
        set
        {
            if(_property1 != value)
            {
                _property1 = value;
                OnPropertyChanged("Property1");
            }
        }
    }

    private void OnPropertyChanged(string propertyName)
    {
            if(PropertyChanged != null)
            {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
    }
}

之后,您可以从客户端代码订阅PropertyChanged事件Class1ToSave,其中您已编写了将数据保存到xml的代码。

由您决定是在每次更改属性后将数据保存到xml还是仅在适当的列表中记录更改。该列表可以在稍后的适当时间进行批量保存以用于优化问题。

通过这种方式,只要属性值发生更改,侦听器就会选择更新的属性值并将其保存到xml中。