繁体   English   中英

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

[英]How do I serialize instance of object to xml?

这是我的代码:

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" />

您需要给您的Member财产设置者。 尝试这个 :

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有一些限制吗?

从来没听说过。 它更多地取决于属性的可访问性

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

感谢@MongZhu帮助我实现了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM