Deserialize xml to Generic type

.net-4.5.2, c#, xml-deserialization

Solution

Please check my solution if it will help you.

Below is Method, which converts xml to generic Class.

  public static T GetValue<T>(String value)
    {
        StringReader strReader = null;

        XmlSerializer serializer = null;

        XmlTextReader xmlReader = null;

        Object obj = null;
        try
        {
            strReader = new StringReader(value);

            serializer = new XmlSerializer(typeof(T));

            xmlReader = new XmlTextReader(strReader);

            obj = serializer.Deserialize(xmlReader);
        }
        catch (Exception exp)
        {

        }
        finally
        {
            if (xmlReader != null)
            {
                xmlReader.Close();
            }
            if (strReader != null)
            {
                strReader.Close();
            }
        }
        return (T)Convert.ChangeType(obj, typeof(T));
    }

How to call that method :

Req objreq = new Req();

objreq = GetValue(strXmlData);

Req is Generic Class . strXmlData is xml string .

Request sample xml :

 <?xml version="1.0"?>
 <Req>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
  </Req>

Request Class :

[System.SerializableAttribute()]
public partial class Req {

    [System.Xml.Serialization.XmlElementAttribute("book")]
    public catalogBook[] book { get; set; }

  }


[System.SerializableAttribute()]
public partial class catalogBook {

    public string author { get; set; }

    public string title { get; set; }

    public string genre { get; set; }

    public decimal price { get; set; }

    public System.DateTime publish_date { get; set; }

    public string description { get; set; }

    public string id { get; set; }

 }

In my case it is working perfectly ,hope it will work in your example .

Thanks .

Problem

I need class which takes two parameter 1- Type ==> class name 2- xml string ==> xml document in string format. now following class convert xml to object which is all working fine but I need final version as generic type Converter class ``` public static partial class XMLPrasing { public static Object ObjectToXML(string xml, Type objectType) { StringReader strReader = null; XmlSerializer serializer = null; XmlTextReader xmlReader = null; Object obj = null; try { strReader = new StringReader(xml); serializer = new XmlSerializer(objectType); xmlReader = new XmlTextReader(strReader); obj = serializer.Deserialize(xmlReader); } catch (Exception exp) { //Handle Exception Code var s = "d"; } finally { if (xmlReader != null) { xmlReader.Close(); } if (strReader != null) { strReader.Close(); } } return obj; } } ``` as Example class ``` [Serializable] [XmlRoot("Genders")] public class Gender { [XmlElement("Genders")] public List<GenderListWrap> GenderListWrap = new List<GenderListWrap>(); } public class GenderListWrap { [XmlAttribute("list")] public string ListTag { get; set; } [XmlElement("Item")] public List<Item> GenderList = new List<Item>(); } public class Item { [XmlElement("CODE")] public string Code { get; set; } [XmlElement("DESCRIPTION")] public string Description { get; set; } } ``` // ``` <Genders><Genders list=\"1\"> <Item> <CODE>M</CODE> <DESCRIPTION>Male</DESCRIPTION></Item> <Item> <CODE>F</CODE> <DESCRIPTION>Female</DESCRIPTION> </Item></Genders> </Genders> ```

Original source