Wednesday, April 1, 2015

Good serialization deserialization example in c# 4.0 (.Net 4.0)

Code of deserialization


           CarInfoCollection carInfoCollection = null;

            using (StringReader strReader = new StringReader(this.textBox.Text.Trim()))
            {
                using (XmlTextReader reader = new XmlTextReader(strReader))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(CarInfoCollection));
                    carInfoCollection = (CarInfoCollection)serializer.Deserialize(reader);
                    reader.Close();
                }
            }


            MessageBox.Show(carInfoCollection.CarInfoFields.Count().ToString());

----------------------------------------------------------------------------------------

Type classes

  [System.SerializableAttribute()]
    [XmlRootAttribute("CarInfoFields", Namespace = "urn:carinfo-schema:CarInfoCollection")]
    public class CarInfoCollection
    {
        [XmlElement("CarInfo")]
        public CarInfo[] CarInfoFields { get; set; }
    }

    [System.SerializableAttribute()]
    public class CarInfo
    {
        [XmlAttribute]
        public String Name { get; set; }

        [XmlAttribute]
        public CarUsage Usage { get; set; }

        [XmlArray(ElementName = "Features", IsNullable = true)]
        [XmlArrayItem(ElementName = "Feature", IsNullable = true)]
        public List<string> Features { get; set; }
    }

----------------------------------------------------------------------------------------

Xml string entered in textbox, examples




Serialization Example

When we do not want xml declaration / omit xml declaration

OmitXmlDeclaration should be set to True while initializing XmlWriter. Sample :-

  public string SerializeToXML(T typeToSerialize)
        {
            using (var sw = new StringWriter())
            {
                using (var xw = XmlWriter.Create(sw, new XmlWriterSettings { OmitXmlDeclaration = true }))
                {
                    var serializer = new XmlSerializer(typeof(T));
                    
                    // below code will omit the namespace in serialized xml
                    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                    ns.Add("", "");
                    serializer.Serialize(xw, typeToSerialize, ns, encodingStyle: string.Empty);
                }
                return sw.ToString();
            }
        }