如何使用BinaryFormatter的在Windows Phone 7的

问题描述:

如何使用的BinaryFormatter在Windows Phone 7的如何使用BinaryFormatter的在Windows Phone 7的

我用这个using System.Runtime.Serialization.Formatters.Binary在service1.svc.cs,但我不能在Windows手机上使用这个参考7.

有没有解决方法?

我的DeserializeObject

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代码,这样我怎么能反序列化。我在这个代码中必须做些什么改变?

+0

您的服务没有书面解决方案。您必须更改服务才能使用Windows Phone 7支持的序列化格式。如果您的服务是WCF,为什么不使用DataContractSerializer并让WCF处理序列化/反序列化? –

的BinaryFormatter没有在Windows Phone支持7

+0

感谢您的回复所以我该如何使用? –

+0

你不能。您需要切换到两个平台都支持的序列化引擎。也许protobuf网,请参阅接受的答案这里获取更多一些信息:http://stackoverflow.com/questions/5091712/binaryformatter-does-not-exist-in-cf-solutions – driis

+0

你能请参阅我的代码。 –

正如@driis提到的,你不能在Windows Phone上使用BinaryFormatter。您可以在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); 
     } 
    } 
} 

和服务器上:

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(); 
     } 
    } 
} 
+0

你能看到我的代码 –

+0

这段代码给我这样的错误。预计不会 消息=“类型 'System.Net.PathList' 与数据合同名 '//schemas.datacontract.org/2004/07/System.Net PathList:HTTP'。考虑使用DataContractResolver或将未知的静态类型添加到已知类型的列表 –

+0

您试图序列化哪种类型的对象? – carlosfigueira

有对WP 7.1二进制序列化没有图书馆的支持。作为driis提到。

你还是使用XmlObjectSerializer代替,或支持最常用的API对象的序列化,如联系人数据,或因此它的子类,甚至一个。

如果选中System.Runtime.Serialization命名空间组件(前。在Visual Studio中的对象浏览器),你会发现足够的类层次结构。

你们为什么关心序列化的方法? XML序列化更便携,更统一,更容易被人读取。

+0

我是新的,所以我不知道如何使用这个我在我的问题发布我的代码 –

+0

carlosfigueira发布了一个非常明智的答案来消除你的疑惑。使用他的解决方案,因为它看起来不错(http://stackoverflow.com/a/12376808/1598508)。 –

+0

这不起作用,它会给出错误 –