如何在Windows Phone 7中使用BinaryFormatter

Aja*_*y P 5 wcf visual-studio-2010 windows-phone-7.1

如何在Windows Phone 7中使用BinaryFormatter.

using System.Runtime.Serialization.Formatters.Binary在service1.svc.cs中使用它,但我不能在windows phone 7中使用此Reference.

这有什么解决方案吗?

我的DeserializeObject代码

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

BinaryFormatter在Windows Phone 7中出错.那么我该怎样才能反序列化.我在这段代码中要做些什么改变?

car*_*ira 6

正如@driis所提到的,你无法BinaryFormatter在Windows Phone上使用.您可以使用二进制编码的WCF端点(即端点,其结合是一个自定义与结合BinaryMessageEncodingBindingElementHttpTransportBindingElement),这将在WP7的支持.你不能在那里使用二进制格式化程序.

更新以下注释:查看您的代码,不仅需要更改代码- 您还需要更改服务代码,以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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并在服务器上:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


dri*_*iis 2

Windows Phone 7 不支持 BinaryFormatter。