我正在尝试将一些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
{}{
}
注意新的“{}”
我在这里做错了什么......先谢谢你的帮助!
答案 0 :(得分: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
没有快乐。