Я пытаюсь создать XML следующим образом:
<?xml version="1.0"?>
<!DOCTYPE APIRequest SYSTEM
"https://url">
<APIRequest>
<Head>
<Key>123</Key>
</Head>
<ObjectClass>
<Field>Value</Field
</ObjectClass>
</APIRequest>
У меня есть класс (ObjectClass), украшенный атрибутами XMLSerialization следующим образом:
[XmlRoot("ObjectClass")]
public class ObjectClass
{
[XmlElement("Field")]
public string Field { get; set; }
}
И моя действительно хакерская интуитивная мысль просто заставить эту работу сделать это, когда я сериализую:
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>");
Однако это генерирует XML следующим образом:
<?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>
то есть. оператор serialize автоматически добавляет текстовое объявление <? XML.
Я знаю, что нападаю на это неправильно, может ли кто-то указать мне в правильном направлении?
В качестве примечания я не думаю, что практический смысл состоит в том, чтобы просто сделать класс APIRequest с ObjectClass в нем (потому что, как говорят 20 различных типов ObjectClass, каждый из них нуждается в этом шаблоне вокруг них), но исправьте меня, если Я ошибаюсь.