How do I deserialize XML into an object using a constructor that takes an XDocument?

前端 未结 4 1229
长情又很酷
长情又很酷 2020-12-18 22:29

I have a class:

public class MyClass
{
   public MyClass(){}
}

I would like to be able to use an XMLSeralizer to Deserialize an XDocument d

相关标签:
4条回答
  • 2020-12-18 22:58

    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));
       }
    }
    
    0 讨论(0)
  • 2020-12-18 23:08

    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());
    }
    
    0 讨论(0)
  • 2020-12-18 23:12

    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());
        }
    }
    
    0 讨论(0)
  • 2020-12-18 23:17

    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());
    }
    
    0 讨论(0)
提交回复
热议问题