所以我正在从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;
不执行任何操作,因此第二个Debug仅打印“n”而没有其他内容,而第一个调试正确打印"s Notetitle1"
。
我的问题是什么?
编辑: 对不起,NoteTitle的实现:
private string _noteTitle = string.Empty;
public string NoteTitle
{
get { return this._noteTitle; }
set { RaisePropertyChanged("NoteTitle"); }
}
答案 0 :(得分:3)
查看NoteTitle
setter的实现,您忘记设置私有字段的值,即
private string _noteTitle = string.Empty;
public string NoteTitle
{
get { return this._noteTitle; }
set
{
this._noteTitle = value; // set the field value
RaisePropertyChanged("NoteTitle");
}
}
这可以解释为什么在设置NoteTitle
属性时没有保留任何值。
答案 1 :(得分: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.
}
}