Domanda

sto cercando di risparmiare un po 'C # codice sorgente nel database. Fondamentalmente ho un RichTextBox che gli utenti possono digitare il proprio codice e Salva che al database.

Quando Copio e incollo dall'ambiente di Visual Studio, vorrei conservare la formattazione ecc Così ho scelto di salvare il FlowDocuments Xaml al database e impostare questo ritorno al RichTextBox.Document.

Il mio seguito due funzioni serialise e deserialise contenuto della 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;
    }

Tuttavia quando provo a serialise e deserialise il seguente codice, sto notando questo comportamento non corretto (?)

using System;
public class TestCSScript : MarshalByRefObject
{

}

Serialized XAML è

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

Si noti la nuova serie di "{}"

Che cosa sto facendo male qui ... Grazie in anticipo per l'aiuto!

È stato utile?

Soluzione

Mi sono dimesso a una soluzione tardiva per ora, ma se qualcuno di voi trova uno pulito, si prega di postare.

Ho usato una chiamata Sostituire di StringBuilder per rimuovere i caratteri indesiderati.

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

    }

ho la sensazione che, quando gli incontri xamlwriter "{" personaggio - è intreprets che come espressione vincolante. Mi chiedo che cosa la sequenza di escape è per questo personaggio.

Nota - Ho provato a cambiare il

XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value

senza la gioia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top