【问题标题】:NullReferenceException while saving XML File with Linq使用 Linq 保存 XML 文件时出现 NullReferenceException
【发布时间】:2010-12-12 20:01:12
【问题描述】:

我在这一行不断收到 NullReferenceException UserRoot.Element("User_ID").Value = User.User_ID.ToString();

我到底做错了什么?

这是该方法的大部分代码

            if (File.Exists(Path2UserDB + User.User_ID.ToString() + ".db") == false)
            {
                File.Create(Path2UserDB + User.User_ID.ToString() + ".db");

            }
            XElement UserRoot = new XElement("User");
            UserRoot.Element("User_ID").Value = User.User_ID.ToString();
            UserRoot.Element("Full_Name").Value = User.Full_Name;
            UserRoot.Element("Gender").Value = User.Gender;
            UserRoot.Element("BirthDate").Value = User.BirthDate.ToString();
            UserRoot.Element("PersonType").Value = User.PersonType.ToString();
            UserRoot.Element("Username").Value = User.Username;
            UserRoot.Element("Password").Value = User.Password;
            UserRoot.Element("Email_adddress").Value = User.Email_Address;
            XDocument UserDoc = new XDocument();
            UserDoc.Save(Path2UserDB + User.User_ID.ToString() + ".db");

谢谢

我知道以纯文本格式保存用户名和密码是非常不安全的,但这只能由我最终实现强安全性的一个进程访问

【问题讨论】:

    标签: winforms linq visual-studio-2010 c#-4.0 linq-to-xml


    【解决方案1】:

    Element("User_ID") 方法返回一个名为<User_ID>现有 元素,如果有的话。

    由于您的 XML 元素为空,因此它返回 null。

    你应该像这样创建你的 XML:

    var userDoc = new XDocument(
        new XElement("User",
            new XElement("User_ID", User.User_ID),
            new XElement("Full_Name", User.Full_Name),
            new XElement("Gender", User.Gender),
            ...
        )
    );
    

    或者,您可以调用Add method 将节点添加到现有元素。

    【讨论】:

      【解决方案2】:

      您收到此错误,因为在 UserRoot 下没有名为 User_ID 的 XML 元素来设置其值。如果您将其注释掉,您将在下一行得到相同的错误,以此类推,因为您没有添加具有这些名称的元素。要创建所需的树,请尝试以下操作:

      XElement UserRoot =
          new XElement("User",
              new XElement("User_ID", User.User_ID.ToString()),
              new XElement("Full_Name", User.Full_Name), 
              new XElement("Gender", User.Gender),
              new XElement("BirthDate", User.BirthDate.ToString()),
              new XElement("PersonType", User.PersonType.ToString()),
              new XElement("Username", User.Username),
              new XElement("Password", User.Password),
              new XElement("Email_adddress", User.Email_Address)
          );
      

      XML Tree Creation with XElement 上的以下 MSDN 链接会有所帮助。

      【讨论】:

      • 你和上面那个人都是对的,如果可以的话,我会同时勾选
      • @Indebi 没问题;当我发布我的解决方案时,我注意到 Slaks 已经更新了他的答案以包含正确的代码,所以他应该得到复选标记。我很高兴这一切都为你解决了:)
      【解决方案3】:

      您想在对其运行方法之前检查该值是 null 还是空。

      if(!String.IsnullorEmpty(User.User_ID))
             UserRoot.Element("User_ID").Value = User.User_ID.ToString();
      

      【讨论】:

      • 我认为问题在于UserRoot.Element("User_ID")null,而不是User.User_ID
      • 明白了,他也应该检查一下
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      相关资源
      最近更新 更多