0

简洁...从 web 服务调用返回的对象在我的转换函数中被附加字节弄乱了。

基本上我有一个网络参考,我将 XDocument 发送到

    System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
    Byte[] baXml = encoding.GetBytes(xdoc.ToString());

    object o = MEF_Test.NewSubmission("*********", "*********", baXml);

传输成功,我得到了我认为是 xml 文档的内容,我正在尝试返回 XDocument。我将我的对象转换为字节数组

    Byte[] baResponse = ObjectToByteArray(o);

我把这个功能放在底部,但它可能是有错误的地方

我返回的对象是 10492 个字符,但在转换后变大了 28 个字节到 10520 的大小

            string ss = Encoding.UTF8.GetString(baResponse);
            string ss1 = ss.Substring(28);
            XDocument xSubmissionResponse = XDocument.Parse(ss1);

在屏幕截图中,您可以看到额外的字符,我试图通过让子字符串越过它们来越过它们。然后该字符串看起来不错,但随后在字符串的前面抛出了一个关于十六进制值 0x0B 的异常。

谁能给这个看看?谢谢。

--包含尽可能多信息的屏幕截图

我没有将图像粘贴在我希望链接有效的声誉。

    private static byte[] ObjectToByteArray(Object obj)
    {
       if (obj == null)
          return null;
       BinaryFormatter bf = new BinaryFormatter();
       MemoryStream ms = new MemoryStream();
       bf.Serialize(ms, obj);
       return ms.ToArray();
    }
4

1 回答 1

1

o 已经是一个字节数组(如调试器中所示)。再次反序列化它是没有意义的。只需将对象 o 转换为 byte[],然后对其运行 Encoding.GetString 方法。

于 2012-11-08T22:08:02.250 回答