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
{}{
}
「{}」の新しいセットに注意してください
ここで何が間違っているのですか...助けてくれてありがとう!