Reputation: 35
I'm working in deserialization and right now I'm able to successfully deserialize XML as intended.
However, when I try to deserialize an XML-tag that dosen't exist, I get the NullException
error and that is understandable.
I want it to just return null
if the tag doesnt exist instead of getting error message but I'm not sure how to do that.
List<FolkbokforingspostTYPE> deserializedList = new List<FolkbokforingspostTYPE>();
deserializedList = Deserialize<List<FolkbokforingspostTYPE>>();
var PostNr = deserializedList.Select(item => item.Personpost.Adresser.Folkbokforingsadress.PostNr).ToList();
In this case, the tag Folkbokforingsadress
doesn't always exist.
Instead of getting the error, I just want it to return NULL and move on, how can I do that?
UPDATE:
My deserialization classes:
[XmlRoot(ElementName = "Sekretessmarkering")]
public class Sekretessmarkering
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "PersonId")]
public class PersonId
{
[XmlElement(ElementName = "PersonNr")]
public string PersonNr { get; set; }
}
[XmlRoot(ElementName = "HanvisningsPersonNr")]
public class HanvisningsPersonNr
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Mellannamn")]
public class Mellannamn
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Aviseringsnamn")]
public class Aviseringsnamn
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Namn")]
public class Namn
{
[XmlElement(ElementName = "Tilltalsnamnsmarkering")]
public string Tilltalsnamnsmarkering { get; set; }
[XmlElement(ElementName = "Fornamn")]
public string Fornamn { get; set; }
[XmlElement(ElementName = "Mellannamn")]
public Mellannamn Mellannamn { get; set; }
[XmlElement(ElementName = "Efternamn")]
public string Efternamn { get; set; }
[XmlElement(ElementName = "Aviseringsnamn")]
public Aviseringsnamn Aviseringsnamn { get; set; }
}
[XmlRoot(ElementName = "ForsamlingKod")]
public class ForsamlingKod
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Folkbokforing")]
public class Folkbokforing
{
[XmlElement(ElementName = "Folkbokforingsdatum")]
public string Folkbokforingsdatum { get; set; }
[XmlElement(ElementName = "LanKod")]
public string LanKod { get; set; }
[XmlElement(ElementName = "KommunKod")]
public string KommunKod { get; set; }
[XmlElement(ElementName = "ForsamlingKod")]
public ForsamlingKod ForsamlingKod { get; set; }
[XmlElement(ElementName = "Fastighetsbeteckning")]
public string Fastighetsbeteckning { get; set; }
[XmlElement(ElementName = "FiktivtNr")]
public string FiktivtNr { get; set; }
}
[XmlRoot(ElementName = "CareOf")]
public class CareOf
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Utdelningsadress1")]
public class Utdelningsadress1
{
[XmlAttribute(AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Nil { get; set; }
}
[XmlRoot(ElementName = "Folkbokforingsadress")]
public class Folkbokforingsadress
{
[XmlElement(ElementName = "CareOf")]
public CareOf CareOf { get; set; }
[XmlElement(ElementName = "Utdelningsadress1")]
public Utdelningsadress1 Utdelningsadress1 { get; set; }
[XmlElement(ElementName = "Utdelningsadress2")]
public string Utdelningsadress2 { get; set; }
[XmlElement(ElementName = "PostNr")]
public string PostNr { get; set; }
[XmlElement(ElementName = "Postort")]
public string Postort { get; set; }
}
[XmlRoot(ElementName = "Riksnycklar")]
public class Riksnycklar
{
[XmlElement(ElementName = "FastighetsId")]
public string FastighetsId { get; set; }
[XmlElement(ElementName = "AdressplatsId")]
public string AdressplatsId { get; set; }
[XmlElement(ElementName = "LagenhetsId")]
public string LagenhetsId { get; set; }
}
[XmlRoot(ElementName = "Adresser")]
public class Adresser
{
[XmlElement(ElementName = "Folkbokforingsadress")]
public Folkbokforingsadress Folkbokforingsadress { get; set; }
[XmlElement(ElementName = "Riksnycklar")]
public Riksnycklar Riksnycklar { get; set; }
}
[XmlRoot(ElementName = "HemortSverige")]
public class HemortSverige
{
[XmlElement(ElementName = "FodelselanKod")]
public string FodelselanKod { get; set; }
[XmlElement(ElementName = "Fodelseforsamling")]
public string Fodelseforsamling { get; set; }
}
[XmlRoot(ElementName = "Fodelse")]
public class Fodelse
{
[XmlElement(ElementName = "HemortSverige")]
public HemortSverige HemortSverige { get; set; }
}
[XmlRoot(ElementName = "Medborgarskap")]
public class Medborgarskap
{
[XmlElement(ElementName = "MedborgarskapslandKod")]
public string MedborgarskapslandKod { get; set; }
[XmlElement(ElementName = "Medborgarskapsdatum")]
public string Medborgarskapsdatum { get; set; }
}
[XmlRoot(ElementName = "Personpost")]
public class Personpost
{
[XmlElement(ElementName = "PersonId")]
public PersonId PersonId { get; set; }
[XmlElement(ElementName = "HanvisningsPersonNr")]
public HanvisningsPersonNr HanvisningsPersonNr { get; set; }
[XmlElement(ElementName = "Namn")]
public Namn Namn { get; set; }
[XmlElement(ElementName = "Folkbokforing")]
public Folkbokforing Folkbokforing { get; set; }
[XmlElement(ElementName = "Adresser")]
public Adresser Adresser { get; set; }
[XmlElement(ElementName = "Fodelse")]
public Fodelse Fodelse { get; set; }
[XmlElement(ElementName = "Medborgarskap")]
public Medborgarskap Medborgarskap { get; set; }
}
[XmlRoot(ElementName = "FolkbokforingspostTYPE")]
public class FolkbokforingspostTYPE
{
[XmlElement(ElementName = "Sekretessmarkering")]
public Sekretessmarkering Sekretessmarkering { get; set; }
[XmlElement(ElementName = "Personpost")]
public Personpost Personpost { get; set; }
}
UPDATE 2
The entire code:
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));
}
Upvotes: 0
Views: 126
Reputation: 35
I solved it by doing this:
var PostNr = deserializedList.Where(item => item.Personpost.Adresser.Folkbokforingsadress != null).Select(item2 => item2.Personpost.Adresser.Folkbokforingsadress.PostNr).ToList();
Upvotes: 0
Reputation: 28499
Starting with C# 6.0 you can use the null-conditional-operator like this:
var PostNr = deserializedList.Select(item => item?.Personpost?.Adresser?.Folkbokforingsadress?.PostNr).ToList();
The operator works like this:
var result = x?.Y
This will return null when x is null. Otherwise it will return the value of x.Y
Upvotes: 0
Reputation: 292405
If you're using C# 6, you can use the new ?.
operator:
var PostNr =
deserializedList
.Select(item => item.Personpost.Adresser.Folkbokforingsadress?.PostNr)
.ToList();
Upvotes: 2