Я пытаюсь сериализовать классы, используя среду выполнения MS и Mono. При использовании MS runtime все идет хорошо, но при использовании Mono я даю некоторые исключения и запускаю программу.
Выдается следующее исключение:
- Произошла ошибка, отражающая тип: System.TypeInitializationException (класс)
- Произошла ошибка, отражающая тип: System.InvalidOperationException (класс)
- Произошла ошибка при отражении поля: System.ArgumentOutOfRangeException <0 (массив классов) </li>
Двоичный файл был скомпилирован с использованием MS SDK, но я не думаю, что это проблема.
Что происходит? .NET не должен быть портативным? Как решить эти исключения?
Я установил MONO для Windows, установил Monodevelop (просто ради) и получил те же проблемы. Вот класс, который вызывает проблемы:
[XmlInclude(typeof(XmlServiceVersion))]
[XmlInclude(typeof(XmlUserLogin))]
[XmlInclude(typeof(XmlNetService))]
[XmlInclude(typeof(XmlUserList))]
[XmlInclude(typeof(XmlGroupList))]
public class XmlMessage
{
...
[XmlAttribute]
public XmlMessageCode Code = XmlMessageCode.Invalid;
[XmlAttribute]
public XmlMessageError Error = XmlMessageError.None;
public Object Contents = null;
private static XmlSerializer mXmlSerialize = new XmlSerializer(typeof(XmlMessage));
}
Текст исключения, в частности:
Unhandled Exception: System.TypeInitializationException: An exception was thrown by the type initializer for iGecko.XmlClientConfiguration ---> System.TypeInitializationException: An exception was thrown by the type initializer for iGecko.Net.XmlMessageClient ---> System.InvalidOperationException: There was an error reflecting type 'iGecko.Net.XmlMessage'. ---> System.InvalidOperationException: There was an error reflecting type 'iGecko.Net.XmlProcessList'. ---> System.InvalidOperationException: There was an error reflecting field 'Items'. ---> System.ArgumentOutOfRangeException: Cannot be negative.
Parameter name: length
Я забыл упомянуть, что это происходит во время конструктора, который должен сериализовать класс выше.
Обновление
Извините за «грандиозное» редактирование, но я начинаю понимать ошибку. XmlMessage содержит открытое поле Object, которому может быть присвоен класс XmlProcessList, производный от класса, описанного в этом посте ( XmlDictionary ), который определяет поле Items.