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;
}
}