[英]Cannot serialize an object using XML Serializer having object names same in child object and sibling objects
如果这是重复的查询,请提出导致这种情况的确切原因,因为我找不到任何原因。
我正在尝试使用xml序列化器将以下对象序列化为xml,但是出现了一些异常。
[Serializable]
public class KAD
{
public KAD()
{
StaffMembers = new List<StaffMember>();
Jobs = new List<Job>();
Tasks = new List<Task>();
}
public List<StaffMember> StaffMembers { get; set; }
public List<Job> Jobs { get; set; }
public List<Task> Tasks { get; set; }
}
public class Job
{
public Job()
{
}
public int? JobId { get; set; }
public string JobTitle { get; set; }
}
public class Task
{
public Task()
{
}
public int? TaskId { get; set; }
public string TaskTitle { get; set; }
}
我的StaffMember类是不同的名称空间,并且再次具有子属性,但名称相同,即Task和Job。
public class StaffMember
{
public StaffMember()
{
Jobs = new List<Job>();
}
public int StaffMemberID { get; set; }
public List<Job> Jobs { get; set; }
}
public class Task
{
public int? TaskId { get; set; }
public string TaskTitle { get; set; }
public bool? OverAllTaskCompetency { get; set; }
public DateTime? ExpireyOfNextCompetencyOrLicenceForTask { get; set; }
}
public class Job
{
public Job()
{
Tasks = new List<Task>();
}
public int? JobId { get; set; }
public string JobTitle { get; set; }
public decimal? Rate { get; set; }
public List<Task> Tasks { get; set; }
}
当我尝试初始化序列化程序时,它在以下行给了我一个例外:
XmlSerializer ser = new XmlSerializer(typeof (KAD));
System.Xml.dll中发生了类型为'System.InvalidOperationException'的未处理异常
附加信息:反映类型'KAD'的错误。 如果有人建议可能的解决方案,将不胜感激。 还有一件事,我无法同时更改子级和父级作用域的类名。
要序列化可为空的属性,您需要像这样标记它们:
[XmlElement(IsNullable = true)]
public int? JobId { get; set; }
但是,您是否真的需要这些属性可为空?
将xml名称空间添加到您的类中:
[XmlType(TypeName = "Task",
Namespace = "Tester.Staff")]
public class Task
{
public int? TaskId { get; set; }
public string TaskTitle { get; set; }
public bool? OverAllTaskCompetency { get; set; }
public DateTime? ExpireyOfNextCompetencyOrLicenceForTask { get; set; }
}
[XmlType(TypeName = "Job",
Namespace = "Tester.Staff")]
public class Job
{
public Job()
{
Tasks = new List<Task>();
}
public int? JobId { get; set; }
public string JobTitle { get; set; }
public decimal? Rate { get; set; }
public List<Task> Tasks { get; set; }
}
我已经找到解决此问题的方法。
通过添加父对象的名称空间和名称,序列化程序可以将它们与子对象区分开。 像父Job和Task类使用XmlRoot属性:
[XmlRoot("KAD_Job", Namespace = "root")]
public class Job
{
public Job()
{
}
public int? JobId { get; set; }
public string JobTitle { get; set; }
public string CraftCode { get; set; }
public decimal? Rate { get; set; }
}
[XmlRoot("KAD_TASK", Namespace = "root")]
public class Task
{
public Task()
{
}
public int? TaskId { get; set; }
public string TaskTitle { get; set; }
}
这对我有用。 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.