Да
XmlAttributeOverrides attribs = new XmlAttributeOverrides();
attribs.Add(typeof(bookType), new XmlAttributes
{
XmlType = new XmlTypeAttribute { Namespace = "urn:xmlns:25hoursaday-com:my-bookshelf" },
});
attribs.Add(typeof(bookType), "publicationdate", new XmlAttributes
{
XmlElements = { new XmlElementAttribute("publication-date") { DataType = "date" } }
});
attribs.Add(typeof(bookType), "publisher", new XmlAttributes
{
XmlAttribute = new XmlAttributeAttribute()
});
attribs.Add(typeof(bookType), "onloan", new XmlAttributes
{
XmlAttribute = new XmlAttributeAttribute("on-loan")
});
Затем сериализуйте с:
XmlSerializer s = new XmlSerializer(typeof(bookType), attribs);
var obj = new bookType { title = "a", author = "b",
publicationdate = DateTime.Now, publisher = "c", onloan = "d"};
s.Serialize(Console.Out, obj);
ОДНАКО
и я не могу предупредить это достаточно сильно; Вы должны кэшировать и повторно использовать объекты XmlSerializer
, созданные таким образом, поскольку каждый из них создает динамическую сборку сериализации, которую нельзя выгрузить . Если вы не кешируете и не используете повторно, вы переполните память.