Winforms 使用Linq保存XML文件时出现NullReferenceException

Winforms 使用Linq保存XML文件时出现NullReferenceException,winforms,linq,visual-studio-2010,c#-4.0,linq-to-xml,Winforms,Linq,Visual Studio 2010,C# 4.0,Linq To Xml,我一直在这一行UserRoot.Element(“User\u ID”).Value=User.User\u ID.ToString()处得到一个NullReferenceException 我到底做错了什么 下面是该方法的大部分代码 if (File.Exists(Path2UserDB + User.User_ID.ToString() + ".db") == false) { File.Create(Path2

我一直在这一行
UserRoot.Element(“User\u ID”).Value=User.User\u ID.ToString()处得到一个NullReferenceException

我到底做错了什么

下面是该方法的大部分代码

            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");
谢谢


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

在对其运行方法之前,您要检查该值是否为null或空

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

在对该值运行方法之前,需要检查该值是否为null或空

if(!String.IsnullorEmpty(User.User_ID))
       UserRoot.Element("User_ID").Value = User.User_ID.ToString();
元素(“User\u 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),
        ...
    )
);
或者,您可以调用将节点添加到现有元素。

元素(“用户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),
        ...
    )
);

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

您会遇到此错误,因为在UserRoot下没有名为User\u 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)
    );

上的以下MSDN链接将有所帮助。

您将收到此错误,因为UserRoot下没有名为User\u 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)
    );

下面的MSDN链接会有所帮助。

我认为问题在于
UserRoot.Element(“User\u ID”)
null
,而不是
User.User\u ID
Gotcha,那么他应该检查一下,我想问题是
UserRoot.Element(“User\u ID”)
null
,而不是
User.User\u ID
Gotcha,他应该检查你和上面的人是否都对,如果我could@Indebi没问题;当我发布我的解决方案时,我注意到Slaks已经更新了他的答案以包含正确的代码,所以他应该得到复选标记。我很高兴这一切都为你解决了:)你和上面的人都是对的,如果我could@Indebi没问题;当我发布我的解决方案时,我注意到Slaks已经更新了他的答案以包含正确的代码,所以他应该得到复选标记。不过,我很高兴这一切都为你解决了:)