Сериализация внутреннего класса в xml - PullRequest
1 голос
/ 10 июня 2011

У меня возникли проблемы при попытке сериализации xml-класса в xml после того, как я изменил его с public на internal.До того, как я изменил уровень защиты, он работал нормально, поэтому я ищу способ обойти общедоступное ограничение.

Причина, по которой я хочу, чтобы он был внутренним, заключается в том, что я переместил класс в библиотеку, и этовне библиотеки бесполезно.

Простой пример макета класса:

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

    public InternalSerializable()
    {
    }
}

Обычно XmlSerializer генерируется автоматически и имеет произвольное имя сборки, поэтому я попытался использовать sgen.exe дляпредварительно сгенерируйте XmlSerializer и сделайте ссылку на него, используя:

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

, но при запуске sgen с переключателем /verbose он говорит, что могут обрабатываться только открытые типы.

Так что мне интереснознаете, как обмануть sgen в обработке внутренних типов или иным образом сериализовать внутренние классы?

Редактировать: У меня довольно много классов с этой проблемой, поэтому я предпочел бы не переписывать все это

1 Ответ

0 голосов
/ 10 июня 2011

Хак, но вы можете сделать ваш класс общедоступным и пометить его атрибутом EditorBrowsable , чтобы скрыть его от intellisense.

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

В C # EditorBrowsable работает только с скомпилированными сборками: Сокрытие GetHashCode / Equals / ToString от быстрых классов интерфейса intellisense в Visual Studio для C #?

...