Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将对象的实例序列化为xml?_C#_Xml_Serialization - Fatal编程技术网

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

C# 如何将对象的实例序列化为xml?,c#,xml,serialization,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

这是我的密码:

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;
   }
}
我已经用一个外部方法完成了这项工作,它是有效的。使用此是否有一些限制?这是我的结果,它不会序列化对象中的任何属性

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

您需要为
成员
属性指定一个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>
asd
使用此是否有一些限制


据我所知没有。它更多地取决于属性的可访问性

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


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

如何设置属性值?
序列化方法将对象的公共字段和读/写属性转换为XML。它不转换方法、索引器、专用字段或只读属性。要序列化对象的所有字段和属性(公共和私有),请使用BinaryFormatter。
-。我认为@MongZhu包含setter的解决方案是唯一的方法。您可以通过创建一个不实际赋值的setter来“欺骗”它:
公共字符串成员{get{return Member;}set{return;}
@sab669您是对的,它确实有一个值。这是“一个”解决方案,但希望这不是唯一的办法,因为没有二传手对我来说不是一个意外。