Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert XML to Object using reflection

Tags:

c#

reflection

xml

If you like problems to resolve, here a big one :D

First, It isn't about serialization, ok?

Well, my situation... I am writting a function that I will pass as parameter a Xml (XmlDocument) and an object (Object) as reference. It will return to me a object (object that was referenced) filled with the values from the Xml (XmlDocument).

For example:

I have a Xml like:

<user>
  <id>1</id>
  <name>Daniel</name>
</user>

Also I have my function

public Object transformXmlToObject (XmlDocument xml, Object ref)
{
  // Scroll each parameters in Xml and fill the object(ref) using reflection.
  return ref;
}

How will I use it?

I will use like this:

[WebMethod]
public XmlDocument RecebeLoteRPS(XmlDocument xml)
{
  // class user receive the object converted from the function
  User user = new User();
  user = transformXmlToObject(xml, user);

  // object filled 
}

I need help guys, please.

Best regards, Dan

like image 646
Dan Avatar asked Feb 12 '26 19:02

Dan


2 Answers

This should do what you want.

using System.Xml;
using System.Reflection;
using System.ComponentModel.DataAnnotations;
using System.Collections;

namespace MyProject.Helpers
{
    public class XMLHelper
    {
        public static void HydrateXMLtoObject(object myObject, XmlNode node)
        {
            if (node == null)
            {
                return;
            }

            PropertyInfo propertyInfo;
            IEnumerator list = node.GetEnumerator();
            XmlNode tempNode;

            while (list.MoveNext())
            {
                tempNode = (XmlNode)list.Current;

                propertyInfo = myObject.GetType().GetProperty(tempNode.Name);

                if (propertyInfo != null) {
                    setProperty(myObject,propertyInfo, tempNode.InnerText);

                }
            }
        }
    }
}
like image 186
andyuk Avatar answered Feb 15 '26 08:02

andyuk


Erm, yes, this is exactly about serialization. In fact, this is exactly what XML serialization was written for.

Anyway, if you want to write your own, perhaps you can set properties based on the tags in your XML blob? i.e. if you User object has an Id and a Name property, perhaps you should set them in accordance with the XML blob?

like image 23
Brad Heller Avatar answered Feb 15 '26 07:02

Brad Heller