XmlSerializer.Serialize 异常:“类型 [type] 不是预期的

本文关键字:type 异常 Serialize 类型 XmlSerializer | 更新日期: 2023-09-27 18:36:14

我正在尝试序列化这个类:

[XmlRoot("ArrayOfEvent")]
public class EventList
{
    public EventList()
    {
    }
    public EventList(IEnumerable<Event> items)
    {
        Items = items;
    }
    [XmlArray("")]
    public IEnumerable<Event> Items { get; set; }
}

以下是EventList.Items中包含的Event类:

public class Event
{
    [XmlElement]
    public string ID { get; set; }
    [XmlElement]
    public string Title { get; set; }
    [XmlElement]
    public string Description { get; set; }
    [XmlElement]
    public string Location { get; set; }
    [XmlElement]
    public DateTime? StartTime { get; set; }
    [XmlElement]
    public DateTime? EndTime { get; set; }
    [XmlElement]
    public bool? AllDay { get; set; }
}

这是错误发生的地方:

public static XmlDocument ToXmlDocument<T>(T obj)
{
    var xmlDocument = new XmlDocument();
    var nav = xmlDocument.CreateNavigator();
    if (nav != null)
    {
        using (var writer = nav.AppendChild())
        {
            var ser = new XmlSerializer(typeof(T));
            ser.Serialize(writer, obj); //throws exception
        }
    }
    return xmlDocument;
}

XmlSerializer在调用Serialize()时给了我这个错误:

The type Domain.EventList was not expected. 
Use the XmlInclude or SoapInclude attribute to specify types that are not 
known statically.

我尝试在EventList类和Event类上使用[XmlInclude(typeof(EventList))],但这些想法都没有奏效。我不知道还能做什么。

有人熟悉这个问题吗?我该如何解决?提前谢谢。

XmlSerializer.Serialize 异常:“类型 [type] 不是预期的

基本上,列表对XmlSerializer来说有点特别。如果您将 DTO 声明为具有具体的列表类型,您将获得更大的成功,例如:

[XmlArray("")]
public List<Event> Items { get; set; }