2011-08-08 1 views
3

私はフロードキュメントをシリアライズするのに、binaryformatterを使いたいです。それは例外です。WPF:BinaryFormatterでFlowDocumentインスタンスをシリアル化できますか?

[Serializable] 
public class BinFlow 
{ 
    public FlowDocument my { get; set; } 
} 


BinFlow myBF = new BinFlow(); 
myBF.my = myFlowDocument; 

FileStream myFile = File.Create(@"d:\test.bin"); 
BinaryFormatter myBinaryFormat = new BinaryFormatter(); 

//exception occured here!! 
myBinaryFormat.Serialize(myFile, myBF); 

「FlowDocumentが「Serializable 'proeprty」を宣言していないという例外メッセージが表示されます。

ps。原因として、XamlReaderとXamlWriterをFlowDocumentのシリアル化に使用できます。バイナリはこの作業のパフォーマンスがより速くなると思います。

答えて

4

私はあなたの関連する質問をしていると仮定しています。あなたのFlowDocumentをあるスレッドから別のスレッドにシャトルすることです。私はBinaryFormatterを使用して成功したことはありません。あなたのFlowDocumentは(たとえば、100以上MB)非常に大きい場合を除き、あなたは簡単にこのようなメモリストリームとしてスレッド間で共有するためにメモリに保存することができます:

MemoryStream stream = new MemoryStream(); 
XamlWriter.Save(myFlowDoc, stream); 
stream.Position = 0; 

はあなたがスレッド間でのMemoryStreamを共有することができ、およびディスクを避けますIO。他のスレッドでは、MemoryStreamからXamlReader.Loadを使用します。

バイナリ形式でディスクに書きたい場合は、Xamlを入手し、XPSのように圧縮ライブラリを使用してZIPファイルを作成します。

関連する問題