【问题标题】:DataContractSerializer stuck on WriteObjectDataContractSerializer 卡在 WriteObject 上
【发布时间】:2014-05-27 12:00:37
【问题描述】:

我有可以使用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 在类内部进行序列化吗?我很困惑..

--------编辑---------

呃..我发现问题出在哪里...我的 BaseObject 的属性上没有 DataContract 和 DataMembers(尽管我不希望我的 xml 中有任何这些属性)。所以显然只为扩展类制作一个 DataContract 不足以序列化它。

【问题讨论】:

  • 你想序列化的对象中真的有这个方法吗?在我看来,它是对象扩展方法的主要候选对象。
  • “卡住”是什么意思?
  • 嗯,现在它只涵盖 2 个类,所以效果没有那么大,但是当这个数量增加时,这样做可能是值得的。这个 DataContractSerialisation 也是测试的一部分,看看我是否可以替换已经存在的 XmlSerialisation。
  • @CathalMF 好吧,当它尝试执行这一行时,它只会无休止地坚持这一行。它没有到达下一行。

标签: c# xml-serialization datacontractserializer


【解决方案1】:

你可以试试这个

        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;

【讨论】:

  • 这给了我相同的结果。所以我怀疑问题并不在于序列化的编码方式。它一直坚持 WriteObject 行。
  • 你的对象“this”是什么样子的——发布代码可能有助于解决问题......
  • 呃.. 我发现问题出在哪里...我的 BaseObject 的属性上没有 DataContract 和 DataMembers(尽管我不希望我的 xml 中有任何这些属性)。所以显然只为扩展类制作一个 DataContract 不足以序列化它。在我为 BaseObject 制作这个 DataContract 的那一刻,它就起作用了……
  • 呵呵呵呵 --- 显而易见的事情总是被监督 :)
  • 我对这些 DataContracts 还很陌生,仍在弄清楚这些东西的来龙去脉。不过感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多