【问题标题】:Serialization of internal class to xml内部类序列化为xml
【发布时间】:2011-09-12 11:42:21
【问题描述】:

在我将一个类从public 更改为internal 后,我在尝试将一个类序列化为xml 时遇到了问题。在我更改保护级别之前它运行良好,所以我正在寻找一种方法来绕过仅限公共的限制。

我希望它是内部的原因是我将类移到了一个库中,它在库之外没有用。

一个简单的类布局示例:

[Serializable]
internal class InternalSerializable
{
    [XmlAttribute]
    public int Foo = 5;

    public InternalSerializable()
    {
    }
}

通常XmlSerializer 会自动生成并具有随机程序集名称,因此我尝试使用sgen.exe 预生成 XmlSerializer 并使用以下方法引用它:

[assembly: InternalsVisibleTo("FileFormats.XmlSerializers")]

但是当使用/verbose 开关运行 sgen 时,它说只能处理公共类型。

所以我想知道是否有人知道如何欺骗 sgen 处理内部类型或以其他方式序列化内部类?

编辑:我有很多课都有这个问题,所以我不想重写整个事情

【问题讨论】:

标签: c# .net serialization sgen


【解决方案1】:

Hackish,但您可以将您的课程设为公开并使用 EditorBrowsable 属性对其进行标记,以将其隐藏在智能感知中。

[EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
[Serializable]
public class InternalSerializable

在 C# 中,EditorBrowsable 仅适用于已编译的程序集:Hiding GetHashCode/Equals/ToString from fluent interface classes intellisense in Visual Studio for C#?

【讨论】:

  • 谢谢。该库仅供内部使用,因此如果我找不到“正确”的方式,我可能会使用它,因为它很容易完成我使用内部所追求的目标。
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 2010-09-15
相关资源
最近更新 更多