Я создаю библиотеку для взаимодействия с третьей стороной. Связь осуществляется через сообщения XML и HTTP. Это работает.
Но, независимо от того, какой код использует библиотеку, не нужно знать внутренние классы. С помощью этого метода мои внутренние объекты сериализуются в XML:
internal static string SerializeXML(Object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType(), "some.domain");
//settings
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
using (StringWriter stream = new StringWriter())
{
using (XmlWriter writer = XmlWriter.Create(stream, settings))
{
serializer.Serialize(writer, obj);
}
return stream.ToString();
}
}
Однако, когда я изменяю модификатор доступа к классам на internal
, я получаю исключение в время выполнения:
[System.InvalidOperationException] = { "MyNamespace.MyClass недоступен из-за уровня защиты. Можно обрабатывать только общедоступные типы." }
Это исключение происходит в первой строке вышеприведенного кода.
Я бы хотел, чтобы мои классы библиотеки не были общедоступными, потому что я не хочу их раскрывать. Я могу это сделать? Как я могу сделать внутренние типы сериализуемыми, используя мой универсальный сериализатор? Что я делаю неправильно?