I have a class:
public class MyClass
{
public MyClass(){}
}
I would like to be able to use an XMLSeralizer to Deserialize an XDocument d
I wanted to do the same thing and decided to do the following:
public class MyClass
{
public MyClass(){
}
public MyClass(XDocument xd)
{
var t = typeof(MyClass);
var o = (MyClass)new XmlSerializer(t).Deserialize(xd.CreateReader());
foreach (var property in t.GetProperties())
property.SetValue(this, property.GetValue(o));
}
}
Is better use some kind of factory, e.g.:
public static MyClass Create(XDocument xd)
{
XmlSerializer _s = new XmlSerializer(typeof(MyClass));
return (MyClass)_s.Deserialize(xd.CreateReader());
}
It's more standard to use a static load method.
public class MyClass
{
public static MyClass Load(XDocument xDoc)
{
XmlSerializer _s = new XmlSerializer(typeof(MyClass));
return (MyClass)_s.Deserialize(xDoc.CreateReader());
}
}
No, it's not possible. Serializers create objects when they deserialize. You've already created an object. Instead, provide a static method to construct from an XDocument.
public static MyClass FromXml (XDocument xd)
{
XmlSerializer s = new XmlSerializer(typeof(MyClass));
return (MyClass)s.Deserialize(xd.CreateReader());
}