using System.Collections.Generic;
using System.Threading.Tasks;
using System.Xml.Serialization;
static string filepath = "TestSerilize.xml";
public static void Main(string[] args)
Console.WriteLine("unhandled exception: ");
public static void DoMain()
MyObject oMyobject = new MyObject();
oMyobject.MyObjectType = "MyCustomType";
List<Items> olistItems = new List<Items>();
Items oItems = new Items();
oItems.value = "testvalue";
oMyobject.Items = olistItems;
Saveobjecttofile(oMyobject, filepath);
Console.WriteLine("Serialized XML: ");
Console.WriteLine(File.ReadAllText(filepath));
dynamic objDeserialized = null;
objDeserialized = GetObjFormfileWithoutValidation(filepath, oMyobject.GetType());
objDeserialized = GetObjFormfileWithValidation(filepath, oMyobject.GetType());
Console.WriteLine("{0} deserialized successfully using validation.", objDeserialized);
private static object GetObjFormfileWithValidation(string filepath, Type type)
XmlReaderSettings oXmlReaderSettings = new XmlReaderSettings();
oXmlReaderSettings.ValidationType = ValidationType.Schema;
var oSchema = GetSchemaFromType(type);
Console.WriteLine("\nSchema for {0}", type);
Console.WriteLine(oSchema.GetOuterXml());
oXmlReaderSettings.Schemas.Add(oSchema);
XmlReader oXmlReader = null;
oXmlReader = XmlReader.Create(filepath, oXmlReaderSettings);
oXmlReader = XmlReader.Create(filepath);
XmlSerializer oXmlSerializer = new XmlSerializer(type);
obj = oXmlSerializer.Deserialize(oXmlReader);
private static XmlSchema GetSchemaFromType(Type type)
var oReflectionImporter = new XmlReflectionImporter();
var oXmlTypeMapping = oReflectionImporter.ImportTypeMapping(type);
var oXmlSchemas = new XmlSchemas();
var oXmlSchema = new XmlSchema();
oXmlSchemas.Add(oXmlSchema);
var oXMLSchemaExporter = new XmlSchemaExporter(oXmlSchemas);
oXMLSchemaExporter.ExportTypeMapping(oXmlTypeMapping);
private static object GetObjFormfileWithoutValidation(string filepath, Type type)
XmlReader oXmlReader = null;
oXmlReader = XmlReader.Create(filepath);
XmlSerializer oXmlSerializer = new XmlSerializer(type);
obj = oXmlSerializer.Deserialize(oXmlReader);
private static void Saveobjecttofile(object objectToSave, string filepath)
System.Xml.Serialization.XmlSerializer oXmlSerializer = new System.Xml.Serialization.XmlSerializer(objectToSave.GetType());
using (System.Xml.XmlTextWriter oXmlTextWriter = new System.Xml.XmlTextWriter(filepath, System.Text.Encoding.UTF8))
oXmlTextWriter.Indentation = 2;
oXmlTextWriter.Formatting = System.Xml.Formatting.Indented;
oXmlSerializer.Serialize(oXmlTextWriter, objectToSave);
public string key { get; set; }
public string value { get; set; }
[Serializable, XmlRoot("MyObject")]
[XmlElement("MyObjectType", IsNullable = true)]
public string MyObjectType { get; set; }
public List<Items> Items;
public static partial class XmlSerializationHelper
public static string GetOuterXml(this XmlSchema schema)
using (var textWriter = new StringWriter())
var settings = new XmlWriterSettings();
using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings))
return textWriter.ToString();