1

C# ソース コードをデータベースに保存しようとしています。基本的に、ユーザーがコードを入力してデータベースに保存できる RichTextBox があります。

ビジュアル スタジオ環境からコピー アンド ペーストするとき、フォーマットなどを保持したいので、FlowDocuments Xaml をデータベースに保存し、これを RichTextBox.Document に戻すことにしました。

以下の 2 つの関数は、RTB のコンテンツをシリアル化および逆シリアル化します。

     private string GetXaml(FlowDocument document)
    {
        if (document == null) return String.Empty;
        else{
            StringBuilder sb = new StringBuilder();
            XmlWriter xw = XmlWriter.Create(sb);
            XamlDesignerSerializationManager sm = new XamlDesignerSerializationManager(xw);
            sm.XamlWriterMode = XamlWriterMode.Expression;                

            XamlWriter.Save(document, sm );
            return sb.ToString();
        }
    }

    private FlowDocument GetFlowDocument(string xamlText)
    {
        var flowDocument = new FlowDocument();
        if (xamlText != null) flowDocument = (FlowDocument)XamlReader.Parse(xamlText);
        // Set return value
        return flowDocument;
    }

ただし、次のコードをシリアライズおよびデシリアライズしようとすると、この不適切な(?)動作に気付きます

using System;
public class TestCSScript : MarshalByRefObject
{

}

シリアル化された XAML は

using System; public class TestCSScript : MarshalByRefObject {}{ }

「{}」の新しいセットに注意してください

ここで何が間違っているのですか...助けてくれてありがとう!

4

1 に答える 1

1

私は今のところ遅い解決策に辞任しました、しかしあなたの誰かがきれいなものを見つけたらそれを投稿してください。

StringbuilderのReplace呼び出しを使用して、不要な文字を削除しました。

    private string GetXaml(FlowDocument document)
    {
        if (document == null) return String.Empty;
        else
        {

            StringBuilder sb = new StringBuilder();
            using (XmlWriter xw = XmlWriter.Create(sb))
            {
                XamlDesignerSerializationManager sm = new XamlDesignerSerializationManager(xw);
                sm.XamlWriterMode = XamlWriterMode.Expression;

                XamlWriter.Save(document, sm);
            }
            sb.Replace("{}", "");
            return sb.ToString();
        }

    }

xamlwriterが「{」文字に遭遇すると、それを拘束力のある表現として解釈しているような気がします。このキャラクターのエスケープシーケンスは何だろうか。

注-私は変更してみました

XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value

喜びもなく。

于 2010-04-13T09:50:00.997 に答える