5
Мне нужно создать что-то вроде этого:XML сериализация + Namespaces (C#)
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amzn-envelope.xsd">
<Header>
...
</Header>
</AmazonEnvelope>
Я пытался что-то вроде этого, но это не совсем правильно:
XmlSerializerNamespaces nms = new XmlSerializerNamespaces();
nms.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
nms.Add("noNamespaceSchemaLocation", "amzn-envelope.xsd");
XmlSerializer serializer = new XmlSerializer(typeof(XMLAmazonEnvelope));
StreamWriter writer = new StreamWriter(path);
serializer.Serialize(writer, objectToSave,nms);
writer.Close();
И результат:
<?xml version="1.0" encoding="utf-8"?>
<xsi:AmazonEnvelope xmlns:noNamespaceSchemaLocation="amzn-envelope.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsi:Header>
...
</xsi:Header>
</xsi:AmazonEnvelope>
И это не совсем то, что я хочу. Любые идеи, что нужно делать по-другому?
'XSI: noNamespaceSchemaLocation = "AMZN-envelope.xsd"' это не декларация пространства имен. Вам нужно будет добавить атрибут 'noNamespaceShcemaLocation' в пространстве имен' xsi' в элемент 'AmazonEnvelope', но я не могу увидеть простой способ сделать это в документации, если у вас нет доступа к источнику XMLAmazonEnvelope '. В этом случае вы можете добавить к этому классу поле/свойство, аннотированное с помощью '[XmlAttribute]' с именем «noNamespaceSchemaLocation» и нужное значение. – millimoose
Или, возможно, это возможно при доступе к источнику с помощью 'XmlAttributeOverrides', но я не знаю, как именно работает этот API. – millimoose
XmlAttribute разрешает только поля, свойства, индексы, и у меня есть: – user1359657