【问题标题】:XmlSerializer and InternalsVisibleTo attributeXmlSerializer 和 InternalsVisibleTo 属性
【发布时间】:2009-01-22 20:13:25
【问题描述】:

是否可以使用InternalsVisibleTo 属性使XmlSerializer 序列化内部类成员?

如果是,我应该让我的内部组件对哪个程序集可见。换句话说,我应该向InternalsVisibleTo 属性提供什么程序集名称和公钥。

【问题讨论】:

    标签: .net xml-serialization internalsvisibleto


    【解决方案1】:

    这是一个常见的问题,请看这个帖子:

    Can an internal setter of a property be serialized?

    DataContractSerializer 可以让您序列化您想要的任何成员。由于它是一种可选的序列化方法,因此您需要根据需要对类进行注释。

    编辑

    重新阅读您的问题后,DataContractSerializer 可能有效,但这可能不是您想要做的。 XMLSerializer 将与InternalsVisibleTo 一起使用,因为它能够看到这些成员,但我建议您查看DataContractSerializer,因为它(在我看来)是一个更好的序列化器。

    【讨论】:

    • 我认为它应该也可以工作,但是在我的程序集中添加 [assembly: InternalsVisibleTo("System.Xml")] 后,内部仍然没有被序列化。我没有使用 DataContractSerializer,因为我的 xml 包含属性,据我所知 DataContractSerializer 仅适用于元素。
    • 哦 - 我以为你试图让一个程序集序列化另一个程序集的内部成员 - 将你的程序集设置为对 System.Xml 可见很遗憾,这将不起作用。看看DataContractSerializer,应该可以做你想做的吧。
    • InternalsVisibleTo 仅在友元程序集直接引用内部类型或成员时才真正有用。由于 System.Xml 不依赖于您的程序集,因此使用 InternalsVisibleTo 将无效。
    【解决方案2】:

    From these comments,jrista 的说法似乎并不完全正确:XmlSerializer 类是动态生成的,因此无法预先知道要添加到“InternalsVisibleTo”的类的名称。除非您按照其他问题中的说明预编译这些序列化程序。

    【讨论】:

      猜你喜欢
      • 2013-12-16
      • 1970-01-01
      • 2011-03-31
      • 2011-04-06
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多