c# - Cannot output <xml> tag when overriding the XmlTextWriter -


i've created own xmltextwriter example, can remove namespaces.

public class nonamespacexmlwriter : xmltextwriter {     //provide many contructors need     public nonamespacexmlwriter(system.io.textwriter output)         : base(output) { formatting = system.xml.formatting.indented; }      public override void writestartdocument() {}      public override void writestartelement(string prefix, string localname, string ns)     {         base.writestartelement("", localname, "");     } } 

when use works ok reason skips <xml ... > </xml> tags. writestartdocument() never called.

i can't specify settings since have private setter , use static method xmlwriter.create cannot override. tried overriding settings themselves, no avail:

public override xmlwritersettings settings {     { return new xmlwritersettings() {omitxmldeclaration = false}; } } 

my code serialize is:

using (stringwriter textwriter = new stringwriter()) {     using (nonamespacexmlwriter xmlwriter = new nonamespacexmlwriter(textwriter))     {         xs.serialize(xmlwriter, p);     }     xml = textwriter.tostring(); } 

any idea how can xml tag appear, or why it's disappearing?

if goal here remove namespaces serialized xml, i'd suggest easier way: can specify xmlserializernamespaces empty namespace illustrade in sample application below

class program {     static void main(string[] args)     {         player player = new player() { id = 102, firstname = "danny", lastname = "topscorer", averagegoalspergame = 3.5, totalgoalsscored = 150 };          xmlserializer serializer = new xmlserializer(typeof(player));         xmlwritersettings settings = new xmlwritersettings() { omitxmldeclaration = true, indent = true, encoding = encoding.utf8 };         stringbuilder output = new stringbuilder();         xmlwriter writer = xmlwriter.create(output, settings);          xmlserializernamespaces xns = new xmlserializernamespaces();         xns.add(string.empty, string.empty);         serializer.serialize(writer, player, xns);          console.writeline(output.tostring());         console.readline();     } }  public class player {     public int id { get; set; }     public string firstname { get; set; }     public string lastname { get; set; }     public int totalgoalsscored { get; set; }     public double averagegoalspergame { get; set; } } 

it output:

<player>   <id>102</id>   <firstname>danny</firstname>   <lastname>topscorer</lastname>   <totalgoalsscored>150</totalgoalsscored>   <averagegoalspergame>3.5</averagegoalspergame> </player> 

otherwise player element defaults:

<player xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http:// www.w3.org/2001/xmlschema"> 

Comments