Pergunta

O formato de arquivo com o qual estou trabalhando (OFX) é do tipo XML e contém um monte de coisas de texto simples antes do início do bit do XML. No entanto, não gosta de ter entre as peças de texto simples e XML, por isso estou me perguntando se há uma maneira de fazer com que o XMLSerialiser ignore isso. Eu sei que poderia passar pelo arquivo e acabar com essa linha, mas seria mais simples e limpo não escrever em primeiro lugar! Alguma ideia?

Foi útil?

Solução

Não é muito difícil, você só precisa serializar em um XMLWriter explicitamente declarado e definir as opções nesse escritor antes de serializar.

public static string SerializeExplicit(SomeObject obj)
{    
    XmlWriterSettings settings;
    settings = new XmlWriterSettings();
    settings.OmitXmlDeclaration = true;

    XmlSerializerNamespaces ns;
    ns = new XmlSerializerNamespaces();
    ns.Add("", "");


    XmlSerializer serializer;
    serializer = new XmlSerializer(typeof(SomeObject));

    //Or, you can pass a stream in to this function and serialize to it.
    // or a file, or whatever - this just returns the string for demo purposes.
    StringBuilder sb = new StringBuilder();
    using(var xwriter = XmlWriter.Create(sb, settings))
    {

        serializer.Serialize(xwriter, obj, ns);
        return sb.ToString();
    }
}

Outras dicas

Você terá que manipular o objeto XML Writer que você usa ao chamar o Serialize método. Seu Settings A propriedade tem um OmitXmlDeclaration Propriedade, que você deseja definir como true. Você também precisará definir o ConformanceLevel propriedade, caso contrário, o XMLWriter ignorará o OmitXmlDeclaration propriedade.

XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = ConformanceLevel.Fragment;
XmlWriter writer = XmlWriter.Create(/*whatever stream you need*/,settings);
serializer.Serialize(writer,objectToSerialize);
writer.close();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top