Я использую .NET 3.5 для сериализации класса в Xml и для создания схемы XSD.Сгенерированный XML ссылается на XSD с помощью атрибута расположения схемы.
Мое решение основано на следующих ответах: XmlSerialization и xsi: SchemaLocation (xsd.exe) и Сериализация XML и схемабез xsd.exe
Я добавляю в свой класс атрибут для ссылки на XSD:
[XmlAttribute("schemaLocation", Namespace = XmlSchema.InstanceNamespace)]
public string XsiSchemaLocation = "MyNameSpace " + "MyNameSpace.xsd";
Проблема в том, что поле XsiSchemaLocation заканчивается в моем файле XSD:
<xs:attribute xmlns:q1="http://www.w3.org/2001/XMLSchema-instance" ref="q1:schemaLocation" />
Когда я пытаюсь отредактировать мой сериализованный файл XML, автозаполнение в Visual Studio не работает из-за вышеуказанного атрибута и выдает следующую ошибку:
'* Атрибут 1019 * не объявлен.
Мое текущее решение по удалению атрибута расположения схемы из XSD заключается в следующем хаке:
XmlReflectionImporter importer = new XmlReflectionImporter();
XmlSchemas schemas = new XmlSchemas();
XmlSchemaExporter exporter = new XmlSchemaExporter(schemas);
XmlTypeMapping map = importer.ImportTypeMapping(m_SerializedType);
exporter.ExportTypeMapping(map);
using (var tw = new StreamWriter(m_XsdPath))
{
//Hack to remove the schema location from the XSD.
((System.Xml.Schema.XmlSchemaComplexType)(schemas[0].Items[1])).Attributes.Clear();
schemas[0].Write(tw);
}
Есть ли лучший способ, чемпринудительное удаление атрибута.Что-то вроде атрибута [XmlSchemaIgnore] было бы идеально.