Запись пользовательских тегов XML в пользовательский форматер XML приводит к пустому XML
Я разрабатываю пользовательский XmlFormatter для приложения веб-API. Я хочу, чтобы он относился к элементам IEnumerable по-разному. Вот код:
class CustomXmlFormatter : XmlMediaTypeFormatter
{
public override Task WriteToStreamAsync(Type type, object value, System.IO.Stream writeStream, System.Net.Http.HttpContent content, System.Net.TransportContext transportContext, System.Threading.CancellationToken cancellationToken)
{
XmlSerializer serializer;
return Task.Factory.StartNew(() =>
{
if ((typeof(IEnumerable<object>)).IsAssignableFrom(type))
{
XmlWriter writer = XmlWriter.Create(writeStream);
writer.WriteStartElement("array");
/* foreach (object o in (IEnumerable<object>)value)
{
serializer = new XmlSerializer(o.GetType());
serializer.Serialize(writeStream, o);
}*/
writer.WriteEndElement();
}
else
{
serializer = new XmlSerializer(type);
serializer.Serialize(writeStream, value, xsn);
}
});
Идея состоит в том, что, когда он получает список, он записывает тег "массив", а затем сериализует все элементы списка. Я прокомментировал цикл foreach, чтобы упростить вопрос.
Проблема в том, что когда код выполняется, он записывает пустой XML (без тега "array"). Как я мог реализовать что-то подобное?
1 ответ
Вы получаете какую-либо ошибку? возможно, в вашем массиве элементы имеют какое-то значение, которое недопустимо в теге xml. и это сделало ваши данные XML пустыми. Вы должны проверить проверку элементов в массиве. все символы не проверены для имени тега xml. я думаю, что лучше использовать этот пример:
sr = new StreamWriter(filename, false, System.Text.Encoding.UTF8);
//Write the header
sr.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
//Write our root node
sr.WriteLine("<" + node.Text + ">");
sr.WriteLine("array");
sr.WriteLine("</" + node.Text + ">");