BinaryFormatter
@driis が述べたように、 Windows Phone では使用できません。WCF エンドポイント (つまり、バインディングがおよびを使用したカスタム バインディングであるエンドポイント) でバイナリエンコーディングを使用できます。これは WP7 でサポートされます。そこでバイナリフォーマッタを使用することはできません。BinaryMessageEncodingBindingElement
HttpTransportBindingElement
以下のコメントを更新してください: コードを見ると、変更が必要なのはそのコードだけではありません。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();
}
}
}