1

byte[] オブジェクトの Deserializer のコードは次のとおりです

public static T DeserializeObject<T>(byte[] xml)
{
    //BinaryFormatter xs = new BinaryFormatter();
    MemoryStream memoryStream=new MemoryStream(xml);
    XmlSerializer xs = new XmlSerializer(typeof(T));
    return (T)xs.Deserialize(memoryStream);
} 

エラーが発生しますThere is an error in XML document

内部例外 Invalid character in the given encoding

どうすればデシリアライズできますか?

関数の呼び出し:

    void svc_Get_Conn(object send, GetConnCompletedEventArgs e)
    {  
        CookieContainer con =DeserializeObject<CookieContainer>(e.Result);
    }

次の関数はService1.svc.csからのものです

public static byte[] SerializeObject<T>(T obj) 
    { 
        try 
        {
            using (MemoryStream memoryStream = new MemoryStream()) 
            { 
                BinaryFormatter xs = new BinaryFormatter(); 
                xs.Serialize(memoryStream, obj); 
                return memoryStream.ToArray(); 
            } 
        } 
        catch 
        { 
            return null; 
        } 
    }
4

1 に答える 1

3

BinaryFormatter 1で作成されたものを逆シリアル化するために XmlSerializer を使用することはできません。

ソリューション:

  1. XmlSerializer を使用してデータをシリアル化します。または、
  2. BinaryFormatter を使用してデータを逆シリアル化します。または、
  3. シリアライゼーションとデシリアライゼーションの代替手段を使用してください。

代替手段にはJson.NETprotobuf-netがあり、どちらも .NET Compact Framework (Windows Phone) ビルドを提供します。「通常の」.NETの標準であるDataContractSerializerもありますが、CFでどのようなサポートがあるかはわかりません。


1シリアライゼーション形式は一般に互換性がなく、この場合に互換性のないペアを使用しようとすることは、JSON としてシリアライズし、ANS.1 (明らかに JSON ではないもの) としてデシリアライズしようとするのと同じくらい理にかなっています。

XmlSerializer :

オブジェクトをXML ドキュメントとの間でシリアル化および逆シリアル化します。

BinaryFormatter :

[オブジェクトを内部の] バイナリ形式にシリアライズおよびデシリアライズします。

于 2012-09-11T21:41:18.047 に答える