Я ищу путь с C#, который я могу сериализировать класс в XML и добавить пространство имен, но определить префикс, который будет использовать то пространство имен.
В конечном счете я пытаюсь генерировать следующий XML:
<myNamespace:Node xmlns:myNamespace="...">
<childNode>something in here</childNode>
</myNamespace:Node>
Я знаю с обоими DataContractSerializer
и XmlSerializer
Я могу добавить пространство имен, но они, кажется, генерируют префикс внутренне с чем-то, чем я не могу управлять. Могут я для управления им с любым из этих сериализаторов (я могу использовать любого из них)?
Если я не смогу управлять поколением пространств имен, то я должен буду записать свой собственный сериализатор XML, и если так, для чего лучший должен записать это?
Чтобы управлять псевдонимом пространства имен, используйте XmlSerializerNamespaces
[XmlRoot("Node", Namespace="http://flibble")]
public class MyType {
[XmlElement("childNode")]
public string Value { get; set; }
}
static class Program
{
static void Main()
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("myNamespace", "http://flibble");
XmlSerializer xser = new XmlSerializer(typeof(MyType));
xser.Serialize(Console.Out, new MyType(), ns);
}
}
Если вам нужно изменить пространство имен во время выполнения, вы можете дополнительно использовать XmlAttributeOverrides
.