无法使用 XML 在子对象和兄弟对象中具有相同对象名称的序列化程序序列化对象
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 Class 是不同的命名空间并且再次具有子属性但名称相同,即任务和工作。
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; }
}
当我尝试初始化 serializer 时,它在这一行给我一个异常:
XmlSerializer ser = new XmlSerializer(typeof (KAD));
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll
附加信息:反映类型 'KAD' 时出错。如果有人提出可能的解决方案,将不胜感激。还有一件事,我无法更改子范围和父范围的 class 名称。
要序列化可为 null 的属性,您需要将它们标记为这样:
[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; }
}
这对我有用。谢谢
如果这是一个重复查询,请指出这种情况的确切原因,因为我找不到任何原因。
我正在尝试使用 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 Class 是不同的命名空间并且再次具有子属性但名称相同,即任务和工作。
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; }
}
当我尝试初始化 serializer 时,它在这一行给我一个异常:
XmlSerializer ser = new XmlSerializer(typeof (KAD));
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll
附加信息:反映类型 'KAD' 时出错。如果有人提出可能的解决方案,将不胜感激。还有一件事,我无法更改子范围和父范围的 class 名称。
要序列化可为 null 的属性,您需要将它们标记为这样:
[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; }
}
这对我有用。谢谢