Я, вероятно, просто делаю это неправильно, я знаю.
Я использую пользовательскую сериализацию, и когда генерируется xml, он помещает имя класса в качестве корневого элемента
Пример:
<MyClassName>
<MyIntendedRootNode>
<ObjectType>
<Property1/>
<Property2/>
...
Я вызываю сериализацию, вызывая xmlserializer.Serialize(writer, Me), поэтому я уверен, что это как-то связано с ней.
Я попытался помещать XMLRoot в класс, но я думаю, что, поскольку vb компилирует этот частичный класс со своей страницей aspx, он либо перезаписывает это свойство, либо полностью игнорирует его.
В идеале я хотел бы просто сказать, чтобы он выбросил все, что у него есть, и использовал другой корневой элемент.
Кто-нибудь еще делает это, кроме меня?
Спасибо
Вы можете использовать либо IXmlSerializable, либо использовать атрибуты XML. Я использую XmlSerializer, передавая корень в конструкторе.
var MemoryStream ms;
var customRoot = dataObject as XmlRootAttribute;
var xml = new XmlSerializer(dataObject.GetType(), customRoot);
xml.Serialize(ms, dataObject);
Или вы можете реализовать IXmlSerializable и иметь полный контроль над своим Xml, но его немного больше усилий, чтобы изменить имя корневого элемента.
В ASP.NET фактический класс, который загружается, является сгенерированным классом, который наследуется от вашего класса. (Оказывается - удивительно, что этот сгенерированный код фактически отделен от дополнительного сгенерированного кода, который сочетается с вашим кодом, используя метод частичного класса. Сгенерированный класс имеет то же имя, что и класс, над которым вы работаете, но он находится в другом пространстве имен.) Поскольку XmlRoot
не является наследуемым атрибутом, XmlSerializer
не видит его.
Я не думаю, что есть какое-либо решение (кроме изменения документа после его создания).
Вы пытаетесь сериализовать файл codebehind?
Я бы предложил написать модель, чтобы содержать данные, которые нужно сохранить, а затем вместо этого сериализуем. Затем используйте соответствующие атрибуты XMLWriter, чтобы убедиться, что ваш корневой элемент правильно назван.
Вы можете создать класс-оболочку и предоставить этому классу-оболочке имя, которое вы хотите показать в корневом каталоге xml.