@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 недоступен из-за уровня защиты. Обрабатывать могут только открытые типы."}

Это исключение происходит в первой строке кода выше.

Я хотел бы, чтобы классы моей библиотеки не были публичными, потому что я не хочу их выставлять. Могу ли я сделать это? Как я могу сделать сериализуемые внутренние типы, используя мой универсальный сериализатор? Что я делаю неправильно?

Ответы на вопрос(5)

Ваш ответ на вопрос