序列化 XML 时出现 System.NullReferenceException [duplicate]

System.NullReferenceException while Serializing XML [duplicate]

提问人: 提问时间:4/8/2014 更新时间:4/8/2014 访问量:630

问:

我想像下面一样序列化简单的类并写入XML文件。

示例类文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SampleXMLSerializeDeserialize
{
    public class SampleXML
    {
        public SampleXML()
        {

        }
        public List<IndividualInfo> IndividualInfo { get; set; }
        public List<CommunicationInfo> Communication { get; set; }
    }

    public class IndividualInfo
    {
        public String Name { get; set; }
        public String Age { get; set; }
    }

    public class CommunicationInfo
    {
        public String presentAdd { get; set; }
        public String permanentAdd { get; set; }
    }
}

序列化方法:

namespace SampleXMLSerializeDeserialize
{
    class Program
    {
        static void Main(string[] args)
        {
            SampleXML s = new SampleXML();
            s.IndividualInfo[0].Name="Jyoti";
            s.IndividualInfo[0].Age = "25";

            s.Communication[0].permanentAdd = "Dhaka";
            s.Communication[0].presentAdd = "Dhaka";
            XmlSerializer serializer = new XmlSerializer(typeof(SampleXML));
            StreamWriter str = new StreamWriter(Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments) + @"\SAM.XML");
            serializer.Serialize(str, s);
        }
    }
}

我在以下行获得System.NullReferenceExeption:s.IndividualInfo[0]。名称=“Jyoti”;

你能帮帮忙吗,我错过了什么

C# XML NullReferenceException

评论

1赞 John Saunders 4/8/2014
几乎所有的情况都是一样的。有关一些提示,请参阅“什么是 .NET 中的 NullReferenceException?”NullReferenceException

答:

3赞 Artyom Neustroev 4/8/2014 #1

您永远不会实例化集合的对象和集合本身。使用这个:[0]

s.IndividualInfo = new List<IndividualInfo>();
s.IndividualInfo.Add(new IndividualInfo { Name = "Jyoti" });
0赞 Raja Nadar 4/8/2014 #2

将构造函数设置为

    public SampleXML()
    {
     IndividualInfo = new List<IndividualInfo>();
     Communication = new List<CommunicationInfo>();
    }

该列表未初始化,并且为 null。 对其他列表也执行相同的操作。

然后使用 Add 方法而不是索引访问。

s.IndividualInfo.Add(new IndividualInfo { Name = "Jyoti", Age = 25 });