Question

J'essaie de gagner du c # code source dans la base de données. Fondamentalement, j'ai un RichTextBox que les utilisateurs peuvent taper leur code et sauf que la base de données.

Quand je copier et coller de l'environnement studio visuel, je voudrais préserver le formattage etc. J'ai donc choisi d'enregistrer le FlowDocuments Xaml à la base de données et définir ce retour à la RichTextBox.Document.

Mon ci-dessous deux fonctions et serialise deserialise le contenu du 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;
    }

Cependant, lorsque je tente de serialise et deserialise le code suivant, je note ce comportement incorrect (?)

using System;
public class TestCSScript : MarshalByRefObject
{

}

sérialisé XAML est

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

Notez que le nouvel ensemble de "{}"

Qu'est-ce que je fais mal ici ... Merci à l'avance pour l'aide!

Était-ce utile?

La solution

Je suis résigné à une solution de retard pour l'instant, mais si quelqu'un d'entre vous trouve un propre, s'il vous plaît poster.

Je l'ai utilisé un appel de remplacer stringbuilder pour supprimer les caractères indésirables.

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

    }

Je sens que lorsque les rencontres XamlWriter « { » caractère - il intreprets que comme une expression de liaison. Je me demande ce que la séquence d'échappement est pour ce personnage.

Note - Je l'ai essayé de changer

XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value

sans joie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top