2

クラスをからに変更した後、クラスをxmlにxmlシリアル化しようとすると、問題が発生しましpublicinternal。保護レベルを変更する前は問題なく機能していたので、一般公開のみの制限を回避する方法を探しています。

内部に配置したい理由は、クラスをライブラリに移動したため、ライブラリの外部では役に立たないためです。

クラスレイアウトの簡単な例:

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

    public InternalSerializable()
    {
    }
}

通常XmlSerializerは自動的に生成され、ランダムなアセンブリ名が付けられているため、を使用sgen.exeしてXmlSerializerを事前生成し、次を使用して参照してみました。

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

ただし、スイッチを使用してsgenを実行/verboseすると、パブリックタイプのみを処理できると表示されます。

だから私は誰かがsgenをだまして内部型を処理する方法や内部クラスをシリアル化する方法を知っているのだろうかと思っていましたか?

編集:私はこの問題でかなりの数のクラスを取得したので、全体を書き直したくない

4

1 に答える 1

0

ハックですが、クラスを公開し、EditorBrowsable属性でマークして、インテリセンスから非表示にすることができます。

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

C#では、EditorBrowsableはコンパイルされたアセンブリでのみ機能します:Visual Studio for C#の流暢なインターフェイスクラスインテリセンスからGetHashCode / Equals / ToStringを非表示にしますか?

于 2011-06-10T12:52:13.673 に答える