DataContractSerializer卡在WriteObject上

时间:2014-05-27 12:00:38

标签: c# xml-serialization datacontractserializer

我有对象(哇!),可以使用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并不足以将其序列化。

1 个答案:

答案 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;