我正在尝试将 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 列表也会被序列化(参见 this question)。
我这主要是工作,但问题是在序列化期间,XmlSerializer 似乎只想处理类的 public
属性 - 如果列表是,它根本不会序列化 AnotherClass声明为内部
。
我尝试让程序集的内部结构对序列化程序可见:
[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Xml")]
这似乎没有做任何事情。有没有办法让 XmlSerializer 递归序列化声明为内部的对象列表?
最佳答案
您走在正确的轨道上...只是实际的序列化不是由 System.Xml 执行的,而是由动态生成的程序集执行的。您无法预测该程序集的名称(它是随机生成的),因此您不能在 InternalsVisibleTo
属性中使用它。
唯一的解决方案是预先生成 XML 序列化程序集。您可以使用 XML Serializer Generator Tool (Sgen.exe) 来做到这一点.生成的程序集的名称将是“YourAssembly.XmlSerializers”;这是您必须在 InternalsVisibleTo
属性中使用的名称。
关于c# - 序列化用内部修饰符声明的类的列表<>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2262957/