1

因此,我正在从 XML 读取文件,并且使用 Debug-Output 可以很好地工作。

while (reader.Read())
{
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "Note")
    {
        Note n = new Note();

        reader.ReadToFollowing("NoteTitle");
        string s = reader.ReadElementContentAsString();
        n.NoteTitle = s;
        Debug.WriteLine("s " + s);
        Debug.WriteLine("n " + n.NoteTitle);
     }
}

我的问题是

n.NoteTitle = s;

不做任何事情,所以第二个调试只打印“n”,而第一个调试打印"s Notetitle1"正确。

我的问题是什么?

编辑:对不起,NoteTitle 的实现:

private string _noteTitle = string.Empty;
    public string NoteTitle
    {
        get { return this._noteTitle; }
        set { RaisePropertyChanged("NoteTitle"); }
    }
4

2 回答 2

3

查看NoteTitle设置器的实现,您忘记设置私有字段的值,即

private string _noteTitle = string.Empty; 

public string NoteTitle 
{ 
    get { return this._noteTitle; } 
    set 
    { 
        this._noteTitle = value; // set the field value
        RaisePropertyChanged("NoteTitle"); 
    } 
}

这可以解释为什么在设置NoteTitle属性时没有保留任何值。

于 2013-01-08T15:27:25.370 回答
2

OP 中的序列化似乎让人们望而却步。我认为这个问题可以更好地表达为:

    Note n = new Note();
    string s = "TEST";
    n.NoteTitle = s;
    Debug.WriteLine("s " + s);
    Debug.WriteLine("n " + n.NoteTitle);

问题变成了:为什么第二个 WriteLine() 显示“n”而不是“n TEST”?

答案是 Note.NoteTitle 的 setter 或 getter 的实现有一些特殊之处。例如,此实现将产生以下效果:

public string NoteTitle
{
    get
    {
        return "";
    }

    set
    {
        // Do nothing.
    }
}
于 2013-01-08T15:20:00.077 回答