1

Here is my code for Deserializer for byte[] object

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);
} 

It gives error There is an error in XML document

InnerException Invalid character in the given encoding

How can I Deserialize it?

Calling funcation:

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

Following funcation is from 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; 
        } 
    }
4

1 回答 1

3

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

解决方案:

  1. 使用 XmlSerializer序列化数据,或者;
  2. 使用 BinaryFormatter反序列化数据,或者;
  3. 使用替代方法进行序列化反序列化。

替代方案包括Json.NETprotobuf-net,它们都提供 .NET Compact Framework (Windows Phone) 构建。还有DataContractSerializer,这是“普通”.NET 中的标准,但我不确定它对 CF 有什么支持。


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

XmlSerializer

在XML 文档中序列化和反序列化对象。

二进制格式化程序

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

于 2012-09-11T21:41:18.047 回答