Pergunta

Estou tentando salvar algum código -fonte C# no banco de dados. Basicamente, eu tenho uma caixa richtext que os usuários podem digitar seu código e salvá -lo no banco de dados.

Quando copio e colo do ambiente do Visual Studio, gostaria de preservar a formação etc., então escolhi salvar os documentos de fluxo XAML no banco de dados e coloque -o de volta ao richtextbox.document.

Minhas duas funções abaixo serializam e desserializam o conteúdo do 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;
    }

No entanto, quando tento serializar e desfazer o código a seguir, estou percebendo esse comportamento incorreto (?)

using System;
public class TestCSScript : MarshalByRefObject
{

}

Xaml serializado é

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

Observe o novo conjunto de "{}"

O que estou fazendo de errado aqui ... Agradecemos antecipadamente pela ajuda!

Foi útil?

Solução

Eu me demiti a uma solução tardia por enquanto, mas se algum de vocês encontrar um limpo, poste -o.

Eu usei uma chamada de substituição do StringBuilder para remover os caracteres indesejados.

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

    }

Tenho a sensação de que, quando o Xamlwriter encontra "{" personagem - intrapreende isso como uma expressão de ligação. Eu me pergunto qual é a sequência de fuga para esse personagem.

Nota - eu tentei mudar o

XamlWriterMode from XamlWriterMode.Expression to XamlWriterMode.Value

sem alegria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top