Pregunta

Estoy intentando ahorrar algo de código fuente en C # en la base de datos. Básicamente tengo un RichTextBox que los usuarios pueden escribir su código y salvo que a la base de datos.

Cuando puedo copiar y pegar desde el entorno de Visual Studio, me gustaría conservar el formateo, etc Así que he elegido para salvar el FlowDocuments Xaml a la base de datos y establecer esto de nuevo a la RichTextBox.Document.

Mi debajo del dos por serializar función y deserialise el contenido de la 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;
    }

Sin embargo cuando intento serializar y deserialise el siguiente código, estoy notando este comportamiento incorrecto (?)

using System;
public class TestCSScript : MarshalByRefObject
{

}

Serialized XAML es

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

Observe el nuevo conjunto de "{}"

¿Qué estoy haciendo mal aquí ... Gracias de antemano por la ayuda!

¿Fue útil?

Solución

He renunciado a una solución de tardanza por ahora, pero si alguno de ustedes se encuentra una limpia, por favor, publicarlo.

He utilizado una llamada Cambie de StringBuilder para eliminar los caracteres no deseados.

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

    }

Tengo la sensación de que cuando los encuentros xamlwriter "{" carácter - que intreprets que como una expresión de enlace. Me pregunto qué es la secuencia de escape para este personaje.

Nota - He intentado cambiar el

XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value

sin alegría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top