5

Windows Phone 7 で BinaryFormatter を使用するにはどうすればよいですか。

これusing System.Runtime.Serialization.Formatters.Binaryは service1.svc.cs で使用しますが、Windows Phone 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 でエラーを出します。どうすれば Deserialize できます。このコードでどのような変更を行う必要がありますか?

4

3 に答える 3

6

BinaryFormatter@driis が述べたように、 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

BinaryFormatter は、Windows Phone 7 ではサポートされていません。

于 2012-09-11T19:41:09.883 に答える
0

WP 7.1 では、バイナリ シリアライゼーションのライブラリ サポートはありません。ドリイスが述べたように。

XmlObjectSerializer代わりに、または連絡先データなどの最も一般的な API オブジェクトのシリアル化をサポートするサブクラスの 1 つを使用する必要があります。

System.Runtime.Serialization名前空間のアセンブリを (Visual Studio のオブジェクト ブラウザーなどで)チェックすると、適切なクラスの階層が見つかりました。

そして、なぜシリアライズ方法にこだわるのですか?XML シリアライゼーションは、移植性が高く、統一性が高く、人間にとって読みやすいものです。

于 2012-09-11T20:13:18.887 に答える