Introduction
It's usual to create a XML Document using some information created dynamically. 
Usually we have a type that have one or more properties (or fields) were stored 
all information. Creating a simple XML accessing to all properties or fields is 
a loss of time. Eventually, some types have a specific XML element. In those 
cases, we must manually generate that element, but only those elements. But 
using reflection we can create xml by accessing properties of an object.
Reflection is mechanism of discovering class information solely at run time. 
Using reflection you would see all the properties, functions, events, 
constructor of an object. 
About Refection
System.Reflection.Assembly
It defines an assembly which is a reusable, version able and self describing 
building block of a Common Language Run time application. I will discuss here 
only the functions that I have used in my code. 
objAssembly = System.Reflection.Assembly.LoadFrom(str);
LoadFrom function takes the path of the assembly to load and loads it and 
returns that Assembly.
After loading the assembly we want to get all the types in that assembly.This 
class provides a function GetTypes() (It returns an array of System.Type objects 
in that assembly) which will do that for us and that line for the code is.
arOfTypes = objAssembly.GetTypes();
Now having touched System.Type class,Let us talk about it.
System.Type:
This class represents type declarations.(class types, interface types, array 
types, value types and enumeration types.) 
It is the root of all Reflection operations.It is the primary means by which we 
access metadata and it acts as a Gateway to Reflection API.It provides methods 
for obtaining information about a Type declaration, such as the constructors, 
properties, methods and Events.
Extracting Constructor Information:
ConstructorInfo[] ctrInfo=t.GetConstructors(); 
It is an object of type System.Type. This method returns an array of objects of 
type ConstructorInfo. This calss is part of System.Reflection Name space.
Extracting Properties Information:
PropertyInfo[] pInfo = t.GetProperties() ;
//It is an object of type System.Type. This method returns an array of objects 
of type PropertyInfo. This calss is part of System.Reflection Name space.
Extracting Method Information:
MethodInfo[] mInfo=t.GetMethods(); 
Extracting Event Information:
EventInfo[] eInfo=t.GetEvents();
Once I get all this info,I am presenting it in a tree view control.This should 
fairly give a good idea of getting information about a Type.
Once you know all the information about a class, what do you want to do? 
Probably you want to create an instance of that class and execute one of its 
methods. I have created two classes MyClass1 and MyClass2 as part of this name 
space and in the click event of more reflection button I have created an 
instance of each of these classes and invoked its methods. I have put message 
boxes so that we would know that they are getting executed. Let us look at this 
code.
Type t= Type.GetType("MyReflection.MyClass1");
I have passed the name of the class to static method GetType of Type class which 
would return me a type Object of type MyClass1.Once you get Type object, as 
mentioned before you could do lot of things with it. Let us look at Activator 
class and see what we can do with this class and Type class.
Example
In this simple case, we have a public class were allocated the information. The 
class looks like following:
public
class Identification
{
    private string 
_name = null;
    private string 
_address = null;
    public string 
Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
        }
    }
    public string 
Address
    {
        get
        {
            return _address;
        }
        set
        {
            _address = value;
        }
    }
}
Next we create an instance of Identification class.
Identification 
identification = new 
Identification(); 
identification.Name = "Edgar"; 
identification.Address = "Lisbon";
Finally create XML Document using reflection to access properties of our 
Identification instance.
 
XmlDocument 
xmlDoc = new 
XmlDocument(); 
XmlDeclaration xmlDec = 
xmlDoc.CreateXmlDeclaration("1.0",
"utf-8",     String.Empty);
xmlDoc.PrependChild(xmlDec); 
XmlElement elemRoot = 
xmlDoc.CreateElement("Identification"); 
xmlDoc.AppendChild(elemRoot); 
XmlElement elem =
null; 
Type idType = identification.GetType();
foreach (PropertyInfo pInfo
in idType.GetProperties()) 
{ 
    object o = 
pInfo.GetValue(identification, null); 
    elem = xmlDoc.CreateElement(pInfo.Name); 
    elem.InnerText = o.ToString(); 
    elemRoot.AppendChild(elem); 
}
Conclusion
In this article we have seen that how reflection is helpful for creating xml 
file.
Is this the Work Around or Best Solution?
Yes this is Best Solution.