1
[Serializable]
public class ProfilesCollection : ObservableCollection<Profile>
{  
    public ProfilesCollection()
    {            
    }
}

[Serializable]
public class Profile : ObservableCollection<SomeData>
{
    private string _name;        
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged(new PropertyChangedEventArgs("Name"));
        }
    }

    public Profile()
    {
    }
}

[Serializable]
public class SomeData : INotifyPropertyChanged
{
    // some properties

    public SomeData()
    { ... }

    [field: NonSerialized]
    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(string property)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(property));
    }
}

我正在尝试使用 XmlSerializer 序列化 ProfilesCollection(或 Profile)对象:

using (var writer = new StreamWriter("1.xml"))
{
    var xs = new XmlSerializer(typeof(ProfilesCollection));
    xs.Serialize(writer, _profiles);
}

但 .xml 不包含 Profile 类中的 Name 属性。除此之外的一切都很好。我应该怎么做才能解决这个问题?

4

2 回答 2

2

序列化集合时XmlSerializer,它只查看集合中的项目,而不查看集合类的其他属性。如果您需要序列化名称,则需要执行以下操作:

public class Profile
{
    private string _name;        
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            OnPropertyChanged(new PropertyChangedEventArgs("Name"));
        }
    }


    private readonly ObservableCollection<SomeData> _data = new ObservableCollection<SomeData>();
    public ObservableCollection<SomeData> Data
    {
        get { return _data; }
    }

    public Profile()
    {
    }
}

顺便说一句,SerializableandNonSerialized属性不被 使用XmlSerializer,所以你不需要它们(并且事件不会被序列化XmlSerializer

于 2012-09-30T12:22:27.180 回答
0

我认为您的 1.xml 文件应该具有与 Profile 类相同的结构。(它应该有一个名称节点?)

于 2012-09-30T13:08:13.693 回答