0

我的序列化 XML 字符串的开头似乎有一些垃圾。我有一个简单的扩展方法

    public static string ToXML(this object This)
    {
        DataContractSerializer ser = new DataContractSerializer(This.GetType());


        var settings = new XmlWriterSettings { Indent = true };

        using (MemoryStream ms = new MemoryStream())
        using (var w = XmlWriter.Create(ms, settings))
        {
            ser.WriteObject(w, This);
            w.Flush();
            return UTF8Encoding.Default.GetString(ms.ToArray());
        }
    }

当我将它应用到我的对象时,我得到了字符串

<?xml version="1.0" encoding="utf-8"?>
<RootModelType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WeinCad.Data">
  <MoineauPump xmlns:d2p1="http://schemas.datacontract.org/2004/07/Weingartner.Numerics">
    <d2p1:Rotor>
      <d2p1:Equidistance>0.0025</d2p1:Equidistance>
      <d2p1:Lobes>2</d2p1:Lobes>
      <d2p1:MajorRadius>0.04</d2p1:MajorRadius>
      <d2p1:MinorRadius>0.03</d2p1:MinorRadius>
    </d2p1:Rotor>
  </MoineauPump>
</RootModelType>

注意开头的垃圾。当我尝试反序列化时,我得到一个错误。如果我将 XML 复制粘贴到我的源中减去垃圾前缀,我可以反序列化它。什么是垃圾文本,我该如何删除或处理它?

注意我的反序列化代码是

public static RootModelType Load(Stream data)
{
    DataContractSerializer ser = new DataContractSerializer(typeof(RootModelType));
    return (RootModelType)ser.ReadObject(data);
}

public static RootModelType Load(string data)
{
    using(var stream = new MemoryStream(Encoding.UTF8.GetBytes(data))){
        return Load(stream);
    }
}
4

1 回答 1

0

此修复似乎有效

    public static string ToXML(this object obj)
    {
        var settings = new XmlWriterSettings { Indent = true };

        using (MemoryStream memoryStream = new MemoryStream())
        using (StreamReader reader = new StreamReader(memoryStream))
        using(XmlWriter writer = XmlWriter.Create(memoryStream, settings))
        {
            DataContractSerializer serializer = 
              new DataContractSerializer(obj.GetType());
            serializer.WriteObject(writer, obj);
            writer.Flush();
            memoryStream.Position = 0;
            return reader.ReadToEnd();
        }
    }
于 2013-05-23T07:02:49.927 回答