我正在尝试将 XML 序列化添加到 C# 中相当简单的类结构中。本质上,有一个根类的单个实例(称为 AClass),它包含一些其他类(称为 AnotherClass)的多个实例的列表:
[XmlRoot("RootNode")]
public class AClass {
[XmlElement("ListNode")]
internal List otherObjects { get; set; }
}
public class AnotherClass {
[XmlAttribute("Name")]
internal string name { get; set; }
}
序列化时,我希望这两个类一起序列化 - 也就是说,如果我序列化 AClass,它的 AnotherClass 列表也会被序列化(请参阅这个问题 https://stackoverflow.com/questions/2169970/how-to-serialize-a-class-that-contains-objects-of-other-classes-recursive-serial).
我基本上可以正常工作,但问题是在序列化期间,XmlSerializer 似乎只想处理public
类的属性 - 如果声明了列表,它根本不会序列化 AnotherClassinternal
.
我尝试使程序集的内部结构对序列化器可见:
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Xml")]
那似乎并没有起到任何作用。有没有办法让 XmlSerializer 递归序列化声明为内部的对象列表?
您走在正确的轨道上...只不过实际的序列化不是由 System.Xml 执行的,而是由动态生成的程序集执行的。您无法预测该程序集的名称(它是随机生成的),因此您不能在InternalsVisibleTo
属性。
唯一的解决方案是预先生成 XML 序列化程序集。您可以使用XML 序列化器生成工具 (Sgen.exe) http://msdn.microsoft.com/en-us/library/bk3w6240.aspx。生成的程序集的名称将为“YourAssembly.XmlSerializers”;这就是你必须在中使用的名称InternalsVisibleTo
属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)