Deserialize custom object

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

public class ProjectHistoryModel
{
    public int  JobNumber { get; set; }
    public int DesignKey { get; set; }
    public string ProjectName { get; set; }
}

public static class ExtensionMethods
{
	public static string SerializeObject<T>(this T source)
    {
		if (source == null)
		{
			return string.Empty;
		}
		try
		{
			var xmlserializer = new XmlSerializer(typeof(T));
			var stringWriter = new StringWriter();
			using (var writer = XmlWriter.Create(stringWriter))
			{
				xmlserializer.Serialize(writer, source);
				return stringWriter.ToString();
			}
		}
		catch (Exception ex)
		{
			throw new Exception("An error occurred", ex);
		}
	}
	public static T DeserializeObject<T>(this string source) 
    {
		if (string.IsNullOrEmpty(source))
		{
			return default(T);
		}
		try
		{
			var xmlserializer = new XmlSerializer(typeof(T));
			var stringReader = new StringReader(source);
			using (var reader = XmlReader.Create(stringReader))
			{
				var result = xmlserializer.Deserialize(reader);
				return (T)result;
			}
		}
		catch (Exception ex)
		{
			throw new Exception("An error occurred", ex);
		}
	}
}
					
public class Program
{

	public static void Main()
	{
		var input = new List<ProjectHistoryModel>
		{
			new ProjectHistoryModel
			{
				JobNumber = 1,
				DesignKey = 2,
				ProjectName = "Three"
			},
			new ProjectHistoryModel
			{
				JobNumber = 4,
				DesignKey = 5,
				ProjectName = "Six"
			},
			new ProjectHistoryModel
			{
				JobNumber = 7,
				DesignKey = 8,
				ProjectName = "Nine"
			}
		};
		
		var serialized = input.SerializeObject();
		
		Console.WriteLine(serialized);
		
		var output = serialized.DeserializeObject<List<ProjectHistoryModel>>();
		
		foreach (var item in output)
		{
			Console.WriteLine("JobNumber: {0} DesignKey: {1} ProjectName: {2}", item.JobNumber, item.DesignKey, item.ProjectName);
		}
	}
}
;