gpt4 book ai didi

c# - 序列化错误 : there was an error reflecting type

转载 作者:太空宇宙 更新时间:2023-11-03 21:47:58 24 4
gpt4 key购买 nike

我有两个类(class):ServiceTriggerServiceCalendar .

当我序列化 model.Triggers 时我收到一个异常(exception):

Cannot serialize member 'yyy.ServiceTrigger.ServiceDaysOfWeek' of type
'System.Collections.Generic.IEnumerable`1[[yyyy.ServiceCalendar, yyy.ChangeAD, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]',
see inner exception for more details."}

我创建了一个 IEnumerable<ServiceTrigger> :

IEnumerable<ServiceTrigger> serviceTriggers = model.Triggers;
XDocument xDoc = SerializationUtil.Serialize(model.Triggers);

头等舱是这样的:

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

第二类是这样的:

[DataContract]
public class Calendar
{
[DataMember(Name = "id")]
public int Id { get; set; }

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

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

[DataMember(Name = "isActive")]
public bool IsActive { 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;
}
}

最佳答案

您不能序列化接口(interface)。您需要使用实际对象,例如 List<ServiceCalendar> .

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

例子:

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

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

否则你会得到类似

的异常

No parameterless constructor defined for type of ServiceCalendar

关于c# - 序列化错误 : there was an error reflecting type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15973542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com