使用XmlSerializer反序列化byte []对象

时间:2012-09-11 21:18:15

标签: wcf windows-phone-7.1 xml-deserialization

这是我的byte [] object

的Deserializer代码
public static T DeserializeObject<T>(byte[] xml)
{
    //BinaryFormatter xs = new BinaryFormatter();
    MemoryStream memoryStream=new MemoryStream(xml);
    XmlSerializer xs = new XmlSerializer(typeof(T));
    return (T)xs.Deserialize(memoryStream);
} 

它提供错误There is an error in XML document

InnerException Invalid character in the given encoding

如何反序列化?

调用功能:

    void svc_Get_Conn(object send, GetConnCompletedEventArgs e)
    {  
        CookieContainer con =DeserializeObject<CookieContainer>(e.Result);
    }

以下功能来自 Service1.svc.cs

public static byte[] SerializeObject<T>(T obj) 
    { 
        try 
        {
            using (MemoryStream memoryStream = new MemoryStream()) 
            { 
                BinaryFormatter xs = new BinaryFormatter(); 
                xs.Serialize(memoryStream, obj); 
                return memoryStream.ToArray(); 
            } 
        } 
        catch 
        { 
            return null; 
        } 
    }

1 个答案:

答案 0 :(得分:3)

XmlSerializer不能用于反序列化使用BinaryFormatter 1 创建的内容。

解决方案:

  1. 使用XmlSerializer 序列化数据,或;
  2. 使用BinaryFormatter 反序列化数据,或;
  3. 使用替代方法进行序列化反序列化。
  4. 备选方案包括Json.NETprotobuf-net,它们都提供.NET Compact Framework(Windows Phone)版本。还有DataContractSerializer,这是“普通”.NET中的标准,但我不确定它对CF有什么支持。


    1 序列化格式通常不可互换并且在这种情况下尝试使用不兼容的对与使用JSON序列化并尝试反序列化为ANS一样有意义.1(明显不是JSON)。

    XmlSerializer

      

    将对象序列化和反序列化为 XML文档。

    BinaryFormatter

      

    序列化和反序列化[对象] [内部]二进制格式。