5

如何在 Windows Phone 7 中使用 BinaryFormatter。

using System.Runtime.Serialization.Formatters.Binary在 service1.svc.cs 中使用了这个,但我不能在 windows phone 7 中使用这个参考。

有什么解决办法吗?

我的反序列化对象代码

 public static T DeserializeObject<T>(byte[] xml)
    {
        BinaryFormatter xs = new BinaryFormatter();
        MemoryStream memoryStream = new MemoryStream(xml);
        return (T)xs.Deserialize(memoryStream);
    } 

BinaryFormatter 在 windows phone 7 中给出错误。那么我该如何反序列化。我必须在此代码中进行哪些更改?

4

3 回答 3

6

正如@driis 提到的,您不能BinaryFormatter在 Windows Phone 上使用。您可以在 WCF 端点(即绑定是与和 的自定义绑定的端点)中使用二进制编码,这将在 WP7 上得到支持。您只是不能在那里使用二进制格式化程序。BinaryMessageEncodingBindingElementHttpTransportBindingElement

更新以下评论:查看您的代码,不仅需要更改代码 - 您还需要更改服务代码,以 Silverlight 支持的格式序列化对象。您可以将DataContractSerializer, 与二进制读取器/写入器一起使用,或者您可以使用在这两种情况下都支持的另一个库。例如,下面的代码应该适用于桌面版和 SL 版:

public static T DeserializeObject<T>(byte[] xml) 
{ 
    using (MemoryStream memoryStream = new MemoryStream(xml))
    {
        using (XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(
            memoryStream, XmlDictionaryReaderQuotas.Max))
        {
            DataContractSerializer dcs = new DataContractSerializer(typeof(T));
            return (T)dcs.ReadObject(reader);
        }
    }
}

在服务器上:

public static byte[] SerializeObject<T>(T obj)
{
    using (MemoryStream ms = new MemoryStream())
    {
        using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateBinaryWriter(ms))
        {
            DataContractSerializer dcs = new DataContractSerializer(typeof(T));
            dcs.WriteObject(writer, obj);
            writer.Flush();
            return ms.ToArray();
        }
    }
}
于 2012-09-11T19:44:45.590 回答
2

Windows Phone 7 不支持 BinaryFormatter。

于 2012-09-11T19:41:09.883 回答
0

WP 7.1 上没有对二进制序列化的库支持。正如德里斯所说。

您应该XmlObjectSerializer改用它,或者甚至使用其中一个支持大多数常见 API 对象(如联系人数据等)的序列化的子类。

如果您检查System.Runtime.Serialization命名空间程序集(例如在 Visual Studio 的对象浏览器中),您会发现足够的类的层次结构。

你为什么关心序列化方法?XML 序列化更便携、更统一且更易于人类阅读。

于 2012-09-11T20:13:18.887 回答