C# 如果为空,如何使反序列化返回null

C# 如果为空,如何使反序列化返回null,c#,xml,C#,Xml,我正在进行反序列化,现在我能够按预期成功地反序列化XML 然而,当我试图反序列化一个不存在的XML标记时,我得到了NullException错误,这是可以理解的 如果标记不存在,我希望它只返回null,而不是获取错误消息,但我不确定如何执行该操作 List<FolkbokforingspostTYPE> deserializedList = new List<FolkbokforingspostTYPE>(); deserializedList = Deserialize

我正在进行反序列化,现在我能够按预期成功地反序列化XML

然而,当我试图反序列化一个不存在的XML标记时,我得到了
NullException
错误,这是可以理解的

如果标记不存在,我希望它只返回
null
,而不是获取错误消息,但我不确定如何执行该操作

List<FolkbokforingspostTYPE> deserializedList = new List<FolkbokforingspostTYPE>();
deserializedList = Deserialize<List<FolkbokforingspostTYPE>>();

var PostNr = deserializedList.Select(item => item.Personpost.Adresser.Folkbokforingsadress.PostNr).ToList();
更新2

整个代码:

 class Program
{
        static void Main(string[] args)
        {
            //try
            //{

            List<FolkbokforingspostTYPE> deserializedList = new List<FolkbokforingspostTYPE>();
            deserializedList = Deserialize<List<FolkbokforingspostTYPE>>();

            var PersonalIdentityNumber = deserializedList.Select(item => item.Personpost.PersonId.PersonNr).ToList();
            var FirstName = deserializedList.Select(item => item.Personpost.Namn.Fornamn).ToList();

            var LastName = deserializedList.Select(item => item.Personpost.Namn.Efternamn).ToList();
            var LanKod = deserializedList.Select(item => item.Personpost.Folkbokforing.LanKod).ToList();
            var Kommunkod = deserializedList.Select(item => item.Personpost.Folkbokforing.KommunKod).ToList();

            var UtdelAdress2 = deserializedList.Select(item => item.Personpost.Adresser.Folkbokforingsadress.Utdelningsadress2).ToList();
            var PostNr = deserializedList.Select(item => item?.Personpost?.Adresser?.Folkbokforingsadress?.PostNr).ToList();

            //var PostOrt = deserializedList.Select(item => item.Personpost.Adresser.Folkbokforingsadress.Postort).ToList();

            //var FodelselanKod = deserializedList.Select(item => item.Personpost.Fodelse.HemortSverige.FodelselanKod).ToList();

            //var Fodelseforsamling = deserializedList.Select(item => item.Personpost.Fodelse.HemortSverige.Fodelseforsamling).ToList();

            var MedborgarskapslandKod = deserializedList.Select(item => item.Personpost.Medborgarskap.MedborgarskapslandKod).ToList();

            var Medborgarskapsdatum = deserializedList.Select(item => item.Personpost.Medborgarskap.Medborgarskapsdatum).ToList();


            //var zipped = PersonalIdentityNumber.Zip(FirstName, Tuple.Create);

            //     foreach (var tuple in zipped)
            //     {
            //         //Console.WriteLine(tuple.Item1);
            //         //Console.WriteLine(tuple.Item2);
            //     }

            //Console.WriteLine(PersonalIdentityNumber.Count());

            //for (int i = 0; i < PersonalIdentityNumber.Count; i++)
            //{
            //    var personnummer = PersonalIdentityNumber[i];
            //    var fornamn = FirstName[i];
            //        var efternamn = LastName[i];

            //        var lankod = LanKod[i];
            //        var kommunkod = Kommunkod[i];
            //        var utdelAdress2 = UtdelAdress2[i];
            //        var postNr = PostNr[i];
            //        var postOrt = PostOrt[i];
            //        var fodelselanKod = FodelselanKod[i];
            //        var fodelseforsamling = Fodelseforsamling[i];
            //        var medborgarskapslandKod = MedborgarskapslandKod[i];
            //        var medborgarskapsdatum = Medborgarskapsdatum[i];
            //         use your variables


            //}

            //Console.WriteLine(PersonalIdentityNumber.Count());

            //foreach (var i in PersonalIdentityNumber)
            //{
            //    Console.WriteLine("Personnummer: " + i);

            //    foreach(var a in FirstName)
            //    {
            //        Console.WriteLine("Namn: " + a);
            //    }







            string connetionString = null;


            SqlDataAdapter adpter = new SqlDataAdapter();
            DataSet ds = new DataSet();
            XmlReader xmlFile;



            connetionString = "Data Source=tsrv2062;Initial Catalog=Bums;User ID=BumsUser;Password=2tusen7Bums";


            xmlFile = XmlReader.Create("navetout.xml", new XmlReaderSettings());
            ds.ReadXml(xmlFile);


            using (var connection = new SqlConnection(connetionString))
            {
                connection.Open();



                DateTime datum = DateTime.Now;

                SqlCommand command1 = new SqlCommand("UPDATE Seamen SET FirstName = @FirstName, LastName = @LastName, NationalRegistrationCountyCode = @NationalRegistrationCountyCode, NationalRegistrationMunicipalityCode = @NationalRegistrationMunicipalityCode, CitizenshipCode = @CitizenshipCode, LastChangedDate = @LastChangedDate WHERE PersonalIdentityNumber = @PersonalIdentityNumber", connection);

                for (int i = 0; i < PersonalIdentityNumber.Count; i++)
                {

                    var personnummer = PersonalIdentityNumber[i];
                    var fornamn = FirstName[i];
                    var efternamn = LastName[i];
                    var lankod = LanKod[i];
                    var kommunkod = Kommunkod[i];
                    var utdelAdress2 = UtdelAdress2[i];
                    var postNr = PostNr[i];
                    //var postOrt = PostOrt[i];
                    //var fodelselanKod = FodelselanKod[i];
                    //var fodelseforsamling = Fodelseforsamling[i];
                    var medborgarskapslandKod = MedborgarskapslandKod[i];
                    // var medborgarskapsdatum = Medborgarskapsdatum[i];


                    command1.Parameters.Clear();
                    command1.Parameters.AddWithValue("@PersonalIdentityNumber", personnummer);
                    command1.Parameters.AddWithValue("@FirstName", fornamn);
                    command1.Parameters.AddWithValue("@LastName", efternamn);
                    command1.Parameters.AddWithValue("@NationalRegistrationCountyCode", lankod);
                    command1.Parameters.AddWithValue("@NationalRegistrationMunicipalityCode", kommunkod);
                    command1.Parameters.AddWithValue("@NationalRegistrationDistributionAddress2", utdelAdress2);
                    //command1.Parameters.AddWithValue("@NationalRegistrationPostCode", postNr);
                    //command1.Parameters.AddWithValue("@NationalRegistrationCity", postOrt);
                    //command1.Parameters.AddWithValue("@BirthCountyCode", fodelselanKod);
                    //command1.Parameters.AddWithValue("@BirthParish", fodelseforsamling);
                    command1.Parameters.AddWithValue("@CitizenshipCode", medborgarskapslandKod);
                    // command1.Parameters.AddWithValue("@CitizenshipDate", medborgarskapsdatum);
                    command1.Parameters.AddWithValue("@LastChangedDate", datum);



                    command1.ExecuteNonQuery();

                    Console.WriteLine(personnummer);


                }
            }

            Console.WriteLine("Done");
        }

            //}// Put a break-point here, then mouse-over PersonalIdentityNumber...  deserializedList contains everything if you need it
        //   catch (Exception)
        //    {

        //        throw;
        //    }
        //    Console.ReadKey();
        //}

    private static T Deserialize<T>() where T : new()
    {
        // Create an instance of T
        T ReturnListOfT = CreateInstance<T>();


        // Create a new file stream for reading the XML file
        using (FileStream ReadFileStream = new FileStream("navetout.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            // Construct a XmlSerializer and use it  
            // to serialize the data from the stream.
            XmlSerializer SerializerObj = new XmlSerializer(typeof(T));
            try
            {
                // Deserialize the hashtable from the file
                ReturnListOfT = (T)SerializerObj.Deserialize(ReadFileStream);
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format("Failed to serialize. Reason: {0}", ex.Message));
            }

        }
        // return the Deserialized data.
        return ReturnListOfT;
    }

    // function to create instance of T
    public static T CreateInstance<T>() where T : new()
    {
        return (T)Activator.CreateInstance(typeof(T));
    }
类程序
{
静态void Main(字符串[]参数)
{
//试一试
//{
List deserializedList=新列表();
反序列化列表=反序列化();
var PersonalIdentityNumber=deserializedList.Select(item=>item.Personpost.PersonId.PersonNr.ToList();
var FirstName=deserializedList.Select(item=>item.Personpost.Namn.Fornamn.ToList();
var LastName=deserializedList.Select(item=>item.Personpost.Namn.Efternamn.ToList();
var LanKod=deserializedList.Select(item=>item.Personpost.Folkbokforing.LanKod.ToList();
var Kommunkod=deserializedList.Select(item=>item.Personpost.Folkbokforing.Kommunkod.ToList();
var UtdelAdress2=deserializedList.Select(item=>item.Personpost.Adresser.folkbokforingsaddress.Utdelningsadress2.ToList();
var PostNr=反序列化列表。选择(项=>项?.Personpost?.Adresser?.FolkBookForingsAdress?.PostNr)。ToList();
//var posort=deserializedList.Select(item=>item.Personpost.Adresser.folkbokforingsaddress.posort).ToList();
//var FodelselanKod=deserializedList.Select(item=>item.Personpost.Fodelse.HemortSverige.FodelselanKod.ToList();
//var Fodelseforsamling=deserializedList.Select(item=>item.Personpost.Fodelse.HemortSverige.Fodelseforsamling.ToList();
var MedborgarskapslandKod=deserializedList.Select(item=>item.Personpost.Medborgarskap.MedborgarskapslandKod.ToList();
var medborgarskapsdatam=deserializedList.Select(item=>item.Personpost.Medborgarskap.medborgarskapsdatam.ToList();
//var zipped=PersonalIdentityNumber.Zip(FirstName,Tuple.Create);
//foreach(压缩的变量元组)
//     {
////Console.WriteLine(tuple.Item1);
////Console.WriteLine(tuple.Item2);
//     }
//Console.WriteLine(PersonalIdentityNumber.Count());
//对于(int i=0;i class Program
{
        static void Main(string[] args)
        {
            //try
            //{

            List<FolkbokforingspostTYPE> deserializedList = new List<FolkbokforingspostTYPE>();
            deserializedList = Deserialize<List<FolkbokforingspostTYPE>>();

            var PersonalIdentityNumber = deserializedList.Select(item => item.Personpost.PersonId.PersonNr).ToList();
            var FirstName = deserializedList.Select(item => item.Personpost.Namn.Fornamn).ToList();

            var LastName = deserializedList.Select(item => item.Personpost.Namn.Efternamn).ToList();
            var LanKod = deserializedList.Select(item => item.Personpost.Folkbokforing.LanKod).ToList();
            var Kommunkod = deserializedList.Select(item => item.Personpost.Folkbokforing.KommunKod).ToList();

            var UtdelAdress2 = deserializedList.Select(item => item.Personpost.Adresser.Folkbokforingsadress.Utdelningsadress2).ToList();
            var PostNr = deserializedList.Select(item => item?.Personpost?.Adresser?.Folkbokforingsadress?.PostNr).ToList();

            //var PostOrt = deserializedList.Select(item => item.Personpost.Adresser.Folkbokforingsadress.Postort).ToList();

            //var FodelselanKod = deserializedList.Select(item => item.Personpost.Fodelse.HemortSverige.FodelselanKod).ToList();

            //var Fodelseforsamling = deserializedList.Select(item => item.Personpost.Fodelse.HemortSverige.Fodelseforsamling).ToList();

            var MedborgarskapslandKod = deserializedList.Select(item => item.Personpost.Medborgarskap.MedborgarskapslandKod).ToList();

            var Medborgarskapsdatum = deserializedList.Select(item => item.Personpost.Medborgarskap.Medborgarskapsdatum).ToList();


            //var zipped = PersonalIdentityNumber.Zip(FirstName, Tuple.Create);

            //     foreach (var tuple in zipped)
            //     {
            //         //Console.WriteLine(tuple.Item1);
            //         //Console.WriteLine(tuple.Item2);
            //     }

            //Console.WriteLine(PersonalIdentityNumber.Count());

            //for (int i = 0; i < PersonalIdentityNumber.Count; i++)
            //{
            //    var personnummer = PersonalIdentityNumber[i];
            //    var fornamn = FirstName[i];
            //        var efternamn = LastName[i];

            //        var lankod = LanKod[i];
            //        var kommunkod = Kommunkod[i];
            //        var utdelAdress2 = UtdelAdress2[i];
            //        var postNr = PostNr[i];
            //        var postOrt = PostOrt[i];
            //        var fodelselanKod = FodelselanKod[i];
            //        var fodelseforsamling = Fodelseforsamling[i];
            //        var medborgarskapslandKod = MedborgarskapslandKod[i];
            //        var medborgarskapsdatum = Medborgarskapsdatum[i];
            //         use your variables


            //}

            //Console.WriteLine(PersonalIdentityNumber.Count());

            //foreach (var i in PersonalIdentityNumber)
            //{
            //    Console.WriteLine("Personnummer: " + i);

            //    foreach(var a in FirstName)
            //    {
            //        Console.WriteLine("Namn: " + a);
            //    }







            string connetionString = null;


            SqlDataAdapter adpter = new SqlDataAdapter();
            DataSet ds = new DataSet();
            XmlReader xmlFile;



            connetionString = "Data Source=tsrv2062;Initial Catalog=Bums;User ID=BumsUser;Password=2tusen7Bums";


            xmlFile = XmlReader.Create("navetout.xml", new XmlReaderSettings());
            ds.ReadXml(xmlFile);


            using (var connection = new SqlConnection(connetionString))
            {
                connection.Open();



                DateTime datum = DateTime.Now;

                SqlCommand command1 = new SqlCommand("UPDATE Seamen SET FirstName = @FirstName, LastName = @LastName, NationalRegistrationCountyCode = @NationalRegistrationCountyCode, NationalRegistrationMunicipalityCode = @NationalRegistrationMunicipalityCode, CitizenshipCode = @CitizenshipCode, LastChangedDate = @LastChangedDate WHERE PersonalIdentityNumber = @PersonalIdentityNumber", connection);

                for (int i = 0; i < PersonalIdentityNumber.Count; i++)
                {

                    var personnummer = PersonalIdentityNumber[i];
                    var fornamn = FirstName[i];
                    var efternamn = LastName[i];
                    var lankod = LanKod[i];
                    var kommunkod = Kommunkod[i];
                    var utdelAdress2 = UtdelAdress2[i];
                    var postNr = PostNr[i];
                    //var postOrt = PostOrt[i];
                    //var fodelselanKod = FodelselanKod[i];
                    //var fodelseforsamling = Fodelseforsamling[i];
                    var medborgarskapslandKod = MedborgarskapslandKod[i];
                    // var medborgarskapsdatum = Medborgarskapsdatum[i];


                    command1.Parameters.Clear();
                    command1.Parameters.AddWithValue("@PersonalIdentityNumber", personnummer);
                    command1.Parameters.AddWithValue("@FirstName", fornamn);
                    command1.Parameters.AddWithValue("@LastName", efternamn);
                    command1.Parameters.AddWithValue("@NationalRegistrationCountyCode", lankod);
                    command1.Parameters.AddWithValue("@NationalRegistrationMunicipalityCode", kommunkod);
                    command1.Parameters.AddWithValue("@NationalRegistrationDistributionAddress2", utdelAdress2);
                    //command1.Parameters.AddWithValue("@NationalRegistrationPostCode", postNr);
                    //command1.Parameters.AddWithValue("@NationalRegistrationCity", postOrt);
                    //command1.Parameters.AddWithValue("@BirthCountyCode", fodelselanKod);
                    //command1.Parameters.AddWithValue("@BirthParish", fodelseforsamling);
                    command1.Parameters.AddWithValue("@CitizenshipCode", medborgarskapslandKod);
                    // command1.Parameters.AddWithValue("@CitizenshipDate", medborgarskapsdatum);
                    command1.Parameters.AddWithValue("@LastChangedDate", datum);



                    command1.ExecuteNonQuery();

                    Console.WriteLine(personnummer);


                }
            }

            Console.WriteLine("Done");
        }

            //}// Put a break-point here, then mouse-over PersonalIdentityNumber...  deserializedList contains everything if you need it
        //   catch (Exception)
        //    {

        //        throw;
        //    }
        //    Console.ReadKey();
        //}

    private static T Deserialize<T>() where T : new()
    {
        // Create an instance of T
        T ReturnListOfT = CreateInstance<T>();


        // Create a new file stream for reading the XML file
        using (FileStream ReadFileStream = new FileStream("navetout.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            // Construct a XmlSerializer and use it  
            // to serialize the data from the stream.
            XmlSerializer SerializerObj = new XmlSerializer(typeof(T));
            try
            {
                // Deserialize the hashtable from the file
                ReturnListOfT = (T)SerializerObj.Deserialize(ReadFileStream);
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format("Failed to serialize. Reason: {0}", ex.Message));
            }

        }
        // return the Deserialized data.
        return ReturnListOfT;
    }

    // function to create instance of T
    public static T CreateInstance<T>() where T : new()
    {
        return (T)Activator.CreateInstance(typeof(T));
    }
var PostNr =
    deserializedList
        .Select(item => item.Personpost.Adresser.Folkbokforingsadress?.PostNr)
        .ToList();
var PostNr = deserializedList.Select(item => item?.Personpost?.Adresser?.Folkbokforingsadress?.PostNr).ToList();
var result = x?.Y
var PostNr = deserializedList.Where(item => item.Personpost.Adresser.Folkbokforingsadress != null).Select(item2 => item2.Personpost.Adresser.Folkbokforingsadress.PostNr).ToList();