XMLSerializer在保存字符串后将其返回为null



我有一个类,它有一个字符串和一个由字符串中的单词填充的列表。保存后,一切看起来都很好,程序运行良好。XML文件看起来也不错。

然而,一旦我重新加载程序并因此从XML文件加载,我就会得到一个"string=null"错误。这是我的课:

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;
}

这是XML文件中的原始数据。

   <Wortarten>
    <strLatein>Wort1, Wort2, Wort3, Wort4, Wort5.</strLatein>
    <listLatein>
      <string>Wort1</string>
      <string>Wort2</string>
      <string>Wort3</string>
      <string>Wort4</string>
      <string>Wort5.</string>
    </listLatein>
  </Wortarten>

确切的错误很简单:"strLatein-null"。

那么,为什么strLatein在这里为null?知道我在哪里搞砸了吗?编辑:错误显示在这一行,但仅在XMLLoad上,当在我运行的程序中添加值时,它正在正常工作。因此,XMLSave保存正确的值,…:

string[] lWorte = strLatein.Split(sep, StringSplitOptions.None);

请注意,我的程序还有3节课,一切都很好。加载和保存已经工作了几个星期。似乎只有这个新类有这个问题,但是我没有任何其他实现iNotifyPropertyChanged的类。因此,它很可能与此有关。

不要序列化列表。这只是多余的数据。此外,属性不应该像方法那样充当数据生成器。

也许您应该考虑使用XML或JSON等标记语言进行序列化和反序列化,然后将文本存储到文件中。这会让你的工作轻松很多。序列化和反序列化也可以极大地帮助您在未来进行扩展。它使向对象添加更多变量变得非常容易。

以下是使用一个简单的car对象进行XML序列化的示例:

public void WriteFile(Car testCar)
{
    string path = "c:temptestCarPath.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:temptestCarPath.xml";
    XmlSerializer serializer = new XmlSerializer(typeof(Car));
    StreamReader reader = new StreamReader(path);
    testCar = (Car)serializer.Deserialize(reader);
    reader.Close();
    return testCar;
}

相关内容

  • 没有找到相关文章

最新更新