У меня есть класс, который мне нужен для выполнения пользовательского XML-вывода, поэтому я реализую интерфейс IXmlSerializable. Тем не менее, некоторые из полей, которые я хочу выводить, с сериализацией по умолчанию, за исключением того, что я хочу изменить имена тегов xml. Когда я вызываю serializer.Serialize, я получаю имена тегов по умолчанию в XML. Могу ли я их каким-то образом изменить?Пользовательская сериализация с использованием XmlSerializer
Вот мой код:
public class myClass: IXmlSerializable
{
//Some fields here that I do the custom serializing on
...
// These fields I want the default serialization on except for tag names
public string[] BatchId { get; set; }
...
... ReadXml and GetSchema methods are here ...
public void WriteXml(XmlWriter writer)
{
XmlSerializer serializer = new XmlSerializer(typeof(string[]));
serializer.Serialize(writer, BatchId);
... same for the other fields ...
// This method does my custom xml stuff
writeCustomXml(writer);
}
// My custom xml method is here and works fine
...
}
Вот мой выход Xml:
<MyClass>
<ArrayOfString>
<string>2643-15-17</string>
<string>2642-15-17</string>
...
</ArrayOfString>
... My custom Xml that is correct ..
</MyClass>
То, что я хочу, чтобы в конечном итоге это:
<MyClass>
<BatchId>
<id>2643-15-17</id>
<id>2642-15-17</id>
...
</BatchId>
... My custom Xml that is correct ..
</MyClass>
Как часто вы сериализации/десериализации? 100 раз в течение жизненного цикла приложения или только при запуске/завершении работы. Если первое, у меня есть реализация, которая значительно более гибкая. –
Действительно только сериализация один раз. Это приложение представляет собой простой инструмент, который извлекает данные из проприетарного формата базы данных и сохраняет в xml. Поэтому я потянул данные в объектную модель, а затем сразу же сериализую. Большинство данных были простыми, поэтому мне не нужно было внедрять IXmlSerializable ... но эта конкретная часть данных была немного больной. – KrisTrip
Ну, посмотрите здесь, код MIT http://code.google.com/p/videobrowser/source/browse/MediaBrowser/Library/Persistance/XmlSettings.cs есть также единичный тест, возможно, вам придется немного расширьте его, но вся архитектура есть. плюс для вашего сценария он будет выполнять MUCH лучше, чем XmlSerializer –