@john: это был не вопрос - вопрос был: «Я пытаюсь сделать X с Y, и он не работает» A: «Делать X не с Y, а с Z». Существует более одного ответа на проблему, и прямой ответ часто не самый подходящий ответ.
даю библиотеку для взаимодействия с третьей стороной. Связь осуществляется через 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 недоступен из-за уровня защиты. Обрабатывать могут только открытые типы."}
Это исключение происходит в первой строке кода выше.
Я хотел бы, чтобы классы моей библиотеки не были публичными, потому что я не хочу их выставлять. Могу ли я сделать это? Как я могу сделать сериализуемые внутренние типы, используя мой универсальный сериализатор? Что я делаю неправильно?