如何将对象的实例序列化为xml?

时间:2017-05-09 15:54:07

标签: c# xml serialization

这是我的代码:

public class DataClass
{
   private string member = string.Empty;
   public string Member
   {
      get
      {
         return member;
      }
   }

   private DataClass() { }
   public DataClass(string memberToSet) 
   {
      this.member = memberToSet;
   }

   public string SerializeXML()
   {
      XmlSerializer xsSubmit = new XmlSerializer(this.GetType());

      var xml = "";

      using (var sww = new StringWriter())
      {
         using (XmlWriter writer = XmlWriter.Create(sww))
         {
            xsSubmit.Serialize(writer, this);
            xml = sww.ToString(); // Your XML
         }
      }

      return xml;
   }
}

我用外部方法完成了这项工作。使用this有一些限制吗?这是我的结果,它没有序列化我的对象中的任何属性。

<?xml version="1.0" encoding="utf-16"?><DataClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

2 个答案:

答案 0 :(得分:1)

您需要为Member属性设置一个setter。试试这个:

public class DataClass
{
    public string Member { get; set; }

    public DataClass(string memberToSet)
    {
        this.Member = memberToSet;
    }
...

您的结果将如下所示:

<?xml version="1.0" encoding="utf-16"?><DataClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Member>asd</Member></DataClass>
  

使用this是否有一些限制?

不是我所知道的。它更多地取决于属性的可访问性

答案 1 :(得分:1)

私人制定者无法做到这一点。这是对XML序列化的可理解的限制,因为如果没有setter,您将无法将xml反序列化为DataClass对象。设计而不是使用类似复制构造函数的原因是因为反序列化过程一次复制一个成员。如果它试图保存所有数据并使用复制构造函数,则可能需要在内存中保存一些大对象。

感谢@MongZhu帮助我实现这个目标。