序列化使用内部修饰符声明的类的List <>?

Tim*_*Tim 5 c# xml access-modifiers xml-serialization

我正在尝试将XML序列化添加到C#中相当简单的类结构中.本质上,有一个根类的实例(称为AClass),它包含一些其他类的几个实例的List(称之为AnotherClass):

[XmlRoot("RootNode")]
public class AClass {
    [XmlElement("ListNode")]
    internal List otherObjects { get; set; }
}

public class AnotherClass {
    [XmlAttribute("Name")]
    internal string name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在序列化时,我希望将这两个类序列化在一起 - 也就是说,如果我序列化了AClass,它的AnotherClass列表也会被序列化(请参阅此问题).

我有这个主要工作,但问题是在序列化过程中,XmlSerializer似乎只想处理public类的属性 - 如果声明列表,它根本不会序列化AnotherClass internal.

我试着让程序集的内部对序列化程序可见:

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Xml")]
Run Code Online (Sandbox Code Playgroud)

这似乎没有做任何事情.有没有办法让XmlSerializer递归序列化内部声明的对象列表?

Tho*_*que 6

你是在正确的轨道上...除了实际的序列化不是由System.Xml执行,而是由动态生成的程序集.您无法预测该程序集的名称(它是随机生成的),因此您无法在该InternalsVisibleTo属性中使用它.

唯一的解决方案是预生成XML序列化程序集.您可以使用XML Serializer Generator Tool(Sgen.exe)执行此操作.生成的程序集的名称将是"YourAssembly.XmlSerializers"; 这是你必须在InternalsVisibleTo属性中使用的名称.