1

我正在尝试将一些 c# 源代码保存到数据库中。基本上我有一个 RichTextBox,用户可以输入他们的代码并将其保存到数据库中。

当我从 Visual Studio 环境复制和粘贴时,我想保留格式等。所以我选择将 FlowDocuments Xaml 保存到数据库并将其设置回 RichTextBox.Document。

我下面的两个函数序列化和反序列化 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 回答