如何使用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代码,这样我怎么能反序列化。我在这个代码中必须做些什么改变?
的BinaryFormatter没有在Windows Phone支持7
感谢您的回复所以我该如何使用? –
你不能。您需要切换到两个平台都支持的序列化引擎。也许protobuf网,请参阅接受的答案这里获取更多一些信息:http://stackoverflow.com/questions/5091712/binaryformatter-does-not-exist-in-cf-solutions – driis
你能请参阅我的代码。 –
正如@driis提到的,你不能在Windows Phone上使用BinaryFormatter
。您可以在WCF端点(即端点,其结合是一个自定义与BinaryMessageEncodingBindingElement
和HttpTransportBindingElement
结合),这将在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();
}
}
}
你能看到我的代码 –
这段代码给我这样的错误。预计不会 消息=“类型 'System.Net.PathList' 与数据合同名 '//schemas.datacontract.org/2004/07/System.Net PathList:HTTP'。考虑使用DataContractResolver或将未知的静态类型添加到已知类型的列表 –
您试图序列化哪种类型的对象? – carlosfigueira
有对WP 7.1二进制序列化没有图书馆的支持。作为driis提到。
你还是使用XmlObjectSerializer
代替,或支持最常用的API对象的序列化,如联系人数据,或因此它的子类,甚至一个。
如果选中System.Runtime.Serialization
命名空间组件(前。在Visual Studio中的对象浏览器),你会发现足够的类层次结构。
你们为什么关心序列化的方法? XML序列化更便携,更统一,更容易被人读取。
我是新的,所以我不知道如何使用这个我在我的问题发布我的代码 –
carlosfigueira发布了一个非常明智的答案来消除你的疑惑。使用他的解决方案,因为它看起来不错(http://stackoverflow.com/a/12376808/1598508)。 –
这不起作用,它会给出错误 –
您的服务没有书面解决方案。您必须更改服务才能使用Windows Phone 7支持的序列化格式。如果您的服务是WCF,为什么不使用DataContractSerializer并让WCF处理序列化/反序列化? –