这是我的代码:
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" />
答案 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帮助我实现这个目标。