سؤال

أحاول حفظ بعض التعليمات البرمجية المصدر C# في قاعدة البيانات. في الأساس ، لديّ مربع RichText يمكن للمستخدمين كتابة التعليمات البرمجية الخاصة بهم وحفظه في قاعدة البيانات.

عندما أقوم بنسخ وألصق من بيئة Visual Studio ، أود الحفاظ على التكوين وما إلى ذلك. لذلك اخترت حفظ FlowDocuments XAML إلى قاعدة البيانات وتعيين هذا مرة أخرى إلى RichTextBox.document.

بلدي أدناه وظيفتين تسلسل و deverialise محتويات 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 {}{ }

لاحظ المجموعة الجديدة من "{}"

ما الخطأ الذي أفعله هنا ... شكرًا مقدمًا على المساعدة!

هل كانت مفيدة؟

المحلول

لقد استقلت من حل متأخر في الوقت الحالي ، ولكن إذا وجد أي منكم حلًا نظيفًا ، فيرجى نشره.

لقد استخدمت استدعاء Call of StringBuilder لإزالة الأحرف غير المرغوب فيها.

    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

بدون فرح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top