Como faço para fazer XMLSerialiser não começar com Xml?>?
-
22-09-2019 - |
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?
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();