c# - 序列化用内部修饰符声明的类的列表<>?

标签 c# xml xml-serialization access-modifiers

我正在尝试将 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/

相关文章:

c# - .Net Speech.Synthesizer 中的内存泄漏?

c# - 在 C# 中解析 PayPal SOAP 响应

java - 使用 STax 在 Java 中解析 XML

xml - namespace 中名为 'name' 的 XML 元素引用了不同的类型

时间:2019-03-17 标签:c#Backgroundworkerclass

c# - 如何使用 DateTime.Now 函数

c# - 从 mysql 数据库将图像加载到 picturebox 时出错。空引用异常

xml - 选择属性值最低的两个元素并将它们合并为输出中的一个元素

c# - 抑制 xsi :nil but still show Empty Element when Serializing in . 网络

c# - IList<object[]> XmlSerializer 与通用列表的序列化