Запись пользовательских тегов 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 + ">");
Другие вопросы по тегам