C# XMLSerializer在保存字符串本身后将其返回为null
我有一个带有字符串的类和一个由字符串中的单词填充的列表。保存后,一切看起来都很好,程序运行正常。XML文件看起来也不错 但是,一旦我重新加载程序并因此从XML文件加载,我就会得到一个“string=null”错误。这是我的班级:C# XMLSerializer在保存字符串本身后将其返回为null,c#,xml,xml-serialization,inotifypropertychanged,C#,Xml,Xml Serialization,Inotifypropertychanged,我有一个带有字符串的类和一个由字符串中的单词填充的列表。保存后,一切看起来都很好,程序运行正常。XML文件看起来也不错 但是,一旦我重新加载程序并因此从XML文件加载,我就会得到一个“string=null”错误。这是我的班级: public class Wortarten : INotifyPropertyChanged { public Wortarten(string quest) { strLatein = quest; } public
public class Wortarten : INotifyPropertyChanged
{
public Wortarten(string quest)
{
strLatein = quest;
}
public Wortarten()
{ }
private string _strLatein;
public string strLatein { set { this._strLatein = value; NotifyPropertyChanged("listLatein"); } get { return this._strLatein; } }
private List<string> _listLatein = new List<string>();
public List<string> listLatein
{
set
{
this._listLatein = value;
}
get
{
_listLatein.Clear();
string[] sep = new string[] { " ", ", " };
string[] lWorte = strLatein.Split(sep, StringSplitOptions.None);
foreach (string wort in lWorte)
{
_listLatein.Add(wort);
}
return _listLatein;
}
}
protected void NotifyPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
请注意,我的程序还有3节课,一切都很好。加载和保存已经工作了几个星期。只有这个新类似乎有这个问题,但是我没有任何其他类实现iNotifyPropertyChanged。所以它很可能与此相关。不要序列化列表。这只是多余的数据。此外,属性不应该作为数据生成器而不像方法。也许您应该考虑使用XML或JSON等标记语言进行序列化和去序列化,然后将文本存储到文件中。这会让你的工作轻松很多。序列化和反序列化还可以极大地帮助您在将来进行扩展。这使得向对象添加更多变量变得非常容易 下面是一个使用简单car对象的XML序列化示例:
public void WriteFile(Car testCar)
{
string path = "c:\temp\testCarPath.xml";
XmlSerializer serializer = new XmlSerializer(typeof(Car));
StreamWriter file = new StreamWriter(path);
serializer.Serialize(file, testCar);
file.Close();
}
public Car ReadFile()
{
Car testCar;
string path = "c:\temp\testCarPath.xml";
XmlSerializer serializer = new XmlSerializer(typeof(Car));
StreamReader reader = new StreamReader(path);
testCar = (Car)serializer.Deserialize(reader);
reader.Close();
return testCar;
}
我同意冗余数据的观点。还没有优化通过。从序列化中删除列表并没有解决问题。同样的错误也出现了,很明显strLatein变量是空的。嗯,这正是我要做的。使用XMLSerializer。问题是StreamReader部分,它只为一秒钟前保存的字符串返回null。
string[] lWorte = strLatein.Split(sep, StringSplitOptions.None);
public void WriteFile(Car testCar)
{
string path = "c:\temp\testCarPath.xml";
XmlSerializer serializer = new XmlSerializer(typeof(Car));
StreamWriter file = new StreamWriter(path);
serializer.Serialize(file, testCar);
file.Close();
}
public Car ReadFile()
{
Car testCar;
string path = "c:\temp\testCarPath.xml";
XmlSerializer serializer = new XmlSerializer(typeof(Car));
StreamReader reader = new StreamReader(path);
testCar = (Car)serializer.Deserialize(reader);
reader.Close();
return testCar;
}