我有对象(哇!),可以使用Serialise
方法自行序列化。
我尝试了多种序列化方法,但所有方法都停留在serialize.WriteObject
方法上。
这是我最近的尝试:
public string Serialise()
{
DataContractSerializer serializer = new DataContractSerializer(this.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, this);
ms.Position = 0;
string serializedContent;
using(StreamReader sr = new StreamReader(ms))
{
serializedContent = sr.ReadToEnd();
}
return serializedContent;
}
我以前用XmlSerializer
执行此操作,这些并没有给我带来任何麻烦。
我很确定我将我的属性设为DataMember
并设置了该类的DataContract
。
我在这里做错了什么?这是我想要使用此序列化的方式吗?是因为我想用DataContract在类中进行序列化吗?我很困惑......
------ EDIT ---------
呃..我弄清楚问题是什么...我的BaseObject在它们的属性上没有DataContract和DataMembers(虽然我不希望在我的xml中有任何这些属性)。因此,显然只为扩展类制作DataContract并不足以将其序列化。
答案 0 :(得分:2)
你可以试试这个
using (var ms = new MemoryStream())
{
try
{
string xml = string.Empty;
var dcs = new DataContractSerializer(this.GetType());
using (var xmlTextWriter = new XmlTextWriter(ms, Encoding.Default))
{
xmlTextWriter.Formatting = Formatting.Indented;
dcs.WriteObject(xmlTextWriter, this);
xmlTextWriter.Flush();
var item = (MemoryStream)xmlTextWriter.BaseStream;
item.Flush();
xml = new UTF8Encoding().GetString(item.ToArray());
}
}
finally
{
ms.Close();
}
}
return xml;