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您是对的,它确实有一个值。这是“一个”解决方案,但希望这不是唯一的办法,因为没有二传手对我来说不是一个意外。