Почему XmlSerializer не сериализует мой массив? - PullRequest
4 голосов
/ 30 марта 2011

Я новичок в XmlSerializer. Я написал небольшой класс для хранения записей из базы данных:

[Serializable]
public struct Entry
{
    public string artkey, lid, request, status, requestdate;
}

Достаточно просто, верно? Должен быть кусок пирога, чтобы сериализовать их список.

У меня есть функция, которая составляет их список. Чтобы сериализовать мой список, я пробую следующий код:

XmlSerializer serializer = new XmlSerializer(typeof(Entry));
System.IO.MemoryStream ms = new System.IO.MemoryStream();
serializer.Serialize(ms, entries.ToArray());
ms.WriteTo(Response.OutputStream);

Этот код печатает следующее исключение:

<error>System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidCastException: Specified cast is not valid.
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterEntry.Write3_Entry(Object o)
   --- End of inner exception stack trace ---
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o, XmlSerializerNamespaces namespaces)
   at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object o)
   at CCB_Requests.xmlResponse_selectFromCcb_Requests(HttpResponse response)
   at CCB_Requests.ProcessRequest(HttpContext context)</error>

Похоже, я совершаю простую ошибку. Как я могу это исправить?

Ответы [ 3 ]

5 голосов
/ 30 марта 2011

вы сериализуете массив из Entry, измените инициализацию XmlSerializer на:

// typeof(Entry) ==> typeof(Entry[])
XmlSerializer serializer = new XmlSerializer(typeof(Entry[]));
1 голос
/ 30 марта 2011

Запись этого вики, так как он не отвечает на вопрос, но показывает, как этот тип должен быть написан:

public class Entry
{
    [XmlElement("artKey")]
    public string ArtKey {get;set;}

    // etc
}

по причинам, см. Комментарии, которые я добавил в вопрос

0 голосов
/ 02 сентября 2014

Не используйте typeof (), когда ваша Entry имеет значение Null или находится в состоянии Faulted, тогда она отображает InvalidCastException, поэтому помимо этого используйте метод GetType (), который выдаст вам тот же вывод, что и typeof ().

   Entry e = new Entry();
            e.artkey = "as";
            e.lid = "lid";
            e.request = "request";
            e.requestdate = "req  uesteddate";
            e.GetType();
    try(e!=null)
    {
         XmlSerializer serializer = new XmlSerializer(e.GetType());
    }
...