sto cercando di generare codice XML in questo modo:NET serializzazione XML senza dichiarazione <?xml> testo
<?xml version="1.0"?>
<!DOCTYPE APIRequest SYSTEM
"https://url">
<APIRequest>
<Head>
<Key>123</Key>
</Head>
<ObjectClass>
<Field>Value</Field
</ObjectClass>
</APIRequest>
Ho una classe (ObjectClass) decorato con XMLSerialization attributi come questo:
[XmlRoot("ObjectClass")]
public class ObjectClass
{
[XmlElement("Field")]
public string Field { get; set; }
}
E il mio pensiero intuitivo molto hacky per ottenere questo funziona è quello di farlo quando serializzo:
ObjectClass inst = new ObjectClass();
XmlSerializer serializer = new XmlSerializer(inst.GetType(), "");
StringWriter w = new StringWriter();
w.WriteLine(@"<?xml version=""1.0""?>");
w.WriteLine("<!DOCTYPE APIRequest SYSTEM");
w.WriteLine(@"""https://url"">");
w.WriteLine("<APIRequest>");
w.WriteLine("<Head>");
w.WriteLine(@"<Field>Value</Field>");
w.WriteLine(@"</Head>");
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
serializer.Serialize(w, inst, ns);
w.WriteLine("</APIRequest>");
Tuttavia, questo genera XML come questo:
<?xml version="1.0"?>
<!DOCTYPE APIRequest SYSTEM
"https://url">
<APIRequest>
<Head>
<Key>123</Key>
</Head>
<?xml version="1.0" encoding="utf-16"?>
<ObjectClass>
<Field>Value</Field>
</ObjectClass>
</APIRequest>
vale a dire la dichiarazione serializzare aggiunge automaticamente una dichiarazione di testo < xml?.
So che sto attaccando così male, quindi qualcuno può indicarmi la giusta direzione?
Come nota, non penso che abbia un senso pratico semplicemente creare una classe APIRequest con un oggetto ObjectClass (perché ci sono 20 diversi tipi di ObjectClass che ognuno ha bisogno di questo bollino attorno a loro) ma correggimi se sbaglio
Automaticamente? Sembra che tu stia aggiungendo manualmente la dichiarazione: w.WriteLine (@ " Xml version =" "1.0" "?>") ;. – Cerebrus
@Cerebrus, non vuole l'interno all'interno del tag. –
sisve
Sì, grazie per averlo chiarito :-) –