Frage

Ich versuche, einige c # Quellcode in der Datenbank zu speichern. Im Prinzip habe ich ein RichTextBox, dass die Benutzer ihren Code eingeben können und speichern, die in die Datenbank.

Als ich von der Visual Studio-Umgebung kopieren und einfügen, ich möchte die Formatierung usw. erhalten Also ich gewählt habe, die FlowDocuments XAML in der Datenbank zu speichern und diese zurück in die RichTextBox.Document gesetzt.

Meine unten zwei Funktions serialise und deserialise den Inhalt des 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;
    }

Allerdings, wenn ich versuche zu serialise und deserialise den folgenden Code, ich bin zu bemerken dieses falsche (?) Verhalten

using System;
public class TestCSScript : MarshalByRefObject
{

}

Serialized XAML ist

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

Beachten Sie die der neue Satz von "{}"

Was mache ich falsch hier ... Vielen Dank im Voraus für die Hilfe!

War es hilfreich?

Lösung

Ich habe jetzt auf eine späte Lösung abgefunden, aber wenn einer von euch einen sauberen findet man, bitte posten.

Ich habe einen Ersetzen Aufruf von Stringbuilder verwendet, um die unerwünschten Zeichen zu entfernen.

    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();
        }

    }

Ich habe das Gefühl, dass, wenn die XamlWriter Begegnungen „{“ Charakter - es intreprets dass als Bindungsausdruck. Ich frage mich, was die Escape-Sequenz für dieses Zeichen ist.

Hinweis - ich versuchte, die

Ändern
XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value

ohne Freude.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top