C# 序列化错误:反映类型时出错

C# 序列化错误:反映类型时出错,c#,serialization,C#,Serialization,我有两个类:ServiceTrigger和ServiceCalendar 当我序列化model.Triggers时,我得到一个异常,说: 无法序列化类型为“yyy.ServiceTrigger.ServiceDaysOfWeek”的成员 'System.Collections.Generic.IEnumerable'1[[yyyy.ServiceCalendar,yyy.ChangeAD,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]',

我有两个类:
ServiceTrigger
ServiceCalendar

当我序列化
model.Triggers
时,我得到一个异常,说:


无法序列化类型为“yyy.ServiceTrigger.ServiceDaysOfWeek”的成员
'System.Collections.Generic.IEnumerable'1[[yyyy.ServiceCalendar,yyy.ChangeAD,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]',
有关详细信息,请参阅内部异常。“}

我创建了一个
IEnumerable

我的序列化类如下所示:

[DataContract]
public class ServiceTrigger
{   
    [DataMember(Name = "triggerID")]
    public long TriggerID { get; set; }

    [DataMember(Name = "name")]
    public string Name { get; set; }

    [DataMember(Name = "dateStart")]
    public string DateStart { get; set; }

    [DataMember(Name = "code")]
    public string Code { get; set; }

    [DataMember(Name = "isActive")]
    public bool IsActive { get; set; }

    [DataMember(Name = "dateFrom")]
    public string DateFrom { get; set; }

    [DataMember(Name = "dateTo")]
    public string DateTo { get; set; }  

    [DataMember(Name = "currentState")]
    public string CurrentState { get; set; }

    [DataMember(Name = "daysOfWeek")]
    public IEnumerable<ServiceCalendar> ServiceDaysOfWeek { get; set; } 

    [DataMember(Name = "monthsOfYear")]
    public IEnumerable<ServiceCalendar> MonthsOfYear { get; set; }

    [DataMember(Name = "daysOfMonth")]
    public IEnumerable<ServiceCalendar> DaysOfMonth { get; set; } 
}
public static class SerializationUtil
{
    public static T Deserialize<T>(XDocument doc)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

        using (var reader = doc.Root.CreateReader())
        {
            return (T)xmlSerializer.Deserialize(reader);
        }
    }

    public static XDocument Serialize(this object obj)
    {
        XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());

        XDocument doc = new XDocument();
        using (var writer = doc.CreateWriter())
        {
            xmlSerializer.Serialize(writer, obj);
        }

        return doc;
    }
}
public静态类SerializationUtil
{
公共静态T反序列化(XDocument文档)
{
XmlSerializer XmlSerializer=新的XmlSerializer(typeof(T));
使用(var reader=doc.Root.CreateReader())
{
返回(T)xmlSerializer.Deserialize(读取器);
}
}
公共静态XDocument序列化(此对象obj)
{
XmlSerializer XmlSerializer=新的XmlSerializer(obj.GetType());
XDocument doc=新XDocument();
使用(var writer=doc.CreateWriter())
{
serializer.Serialize(writer,obj);
}
退货单;
}
}

您无法序列化接口。您需要使用实际对象,例如
List

还请注意,
ServiceCalendar
需要一个没有参数的默认构造函数,以便在反序列化时创建它。这只有在添加带有参数的自定义构造函数时才重要。如果根本没有构造函数,则默认构造函数已经存在

例如:

public class ServiceCalendar {
    // this is required for deserialization if a .ctor with parameters is present.
    public ServiceCalendar() { }

    public ServiceCalendar(int id) {
        this.id = id;
    }
}
否则,您将得到类似的异常

没有为ServiceCalendar类型定义无参数构造函数


无法序列化接口。您需要使用实际对象,例如
List

还请注意,
ServiceCalendar
需要一个没有参数的默认构造函数,以便在反序列化时创建它。这只有在添加带有参数的自定义构造函数时才重要。如果根本没有构造函数,则默认构造函数已经存在

例如:

public class ServiceCalendar {
    // this is required for deserialization if a .ctor with parameters is present.
    public ServiceCalendar() { }

    public ServiceCalendar(int id) {
        this.id = id;
    }
}
否则,您将得到类似的异常

没有为ServiceCalendar类型定义无参数构造函数


您需要修复帖子的格式。类似“My serialization class is like this”的注释不应位于代码块中,这会使其难以读取。您从何处获得异常?能否发布完整异常?无法序列化类型为“System.Collections.Generic.IEnumerable`1”的成员“yyyy.ServiceTrigger.ServiceDaysOfWeek”[[yyyy.ServiceCalendar,yyy.ChangeAD,版本=1.0.0,区域性=中性,PublicKeyToken=null]',有关详细信息,请参阅内部异常。“}无法序列化System.Collections.Generic.IEnumerable`1[yyy.ServiceCalendar,yyy,版本=1.0.0.0,区域性=中性,PublicKeyToken=null]]类型的成员yyy.ServiceTrigger.ServiceDaysOfWeek]因为它是一个接口。“可能重复:异常告诉您“查看内部异常”,因此您需要查看内部异常。请将内部异常的消息也添加到您的问题中。您需要修复帖子的格式。类似“我的序列化类如下”的注释“不应位于代码块中,使其难以读取。你到底从哪里得到这个例外?您可以发布完整的异常吗?无法序列化“System.Collections.Generic.IEnumerable”类型的成员“yyy.ServiceTrigger.ServiceDaysOfWeek”`1[[yyyy.ServiceCalendar,yyyy.ChangeAD,Version=1.0.0,Culture=neutral,PublicKeyToken=null]],有关详细信息,请参阅内部异常。“}无法序列化System.Collections.Generic.IEnumerable`1[yyy.ServiceCalendar,yyy,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]]类型的成员yyy.ServiceTrigger.ServiceDaysOfWeek,因为它是一个接口。“可能重复:异常告诉您”请参阅内部异常,因此需要查看内部异常。请将内部异常的消息也添加到您的问题中。
public class ServiceCalendar {
    // this is required for deserialization if a .ctor with parameters is present.
    public ServiceCalendar() { }

    public ServiceCalendar(int id) {
        this.id = id;
    }
}