Я немного не в себе. Я использовал xsd.exe для создания схемы xsd из файла xml, а затем для создания класса C # из этого xsd. Кажется, что все работает нормально.
В данный момент я просто пытаюсь десериализовать XML. Файл, который я десериализирую, если тот самый файл, который я использовал для создания класса изначально. Вот мой код:
String xsdPath=@"C:\Users\tol56881\Documents\dnd4e.xsd";
String xmlPath=@"C:\Users\tol56881\Documents\dnd4e.xml";
String xsdNamespace="";
//Validation stuff
XmlParserContext context = new XmlParserContext(null, null, "", XmlSpace.None);
XmlValidatingReader vr = new XmlValidatingReader(xmlPath, XmlNodeType.Element, context);
vr.ValidationType = ValidationType.Schema;
vr.Schemas.Add(xsdNamespace, xsdPath);
while (vr.Read()) ;
//Actually reading the file
TextReader tr = new StreamReader(xmlPath);
D20Character character = (D20Character)(new XmlSerializer(typeof(D20Character))).Deserialize(tr);
Он компилируется нормально, но когда я пытаюсь запустить его, я получаю ошибку, которая повторяется для четырех различных объектов. Ниже приведен пример изменения имен объектов.
Unable to generate a temporary class (result=1).
error CS0030: Cannot convert type 'Namespace.ObjectName[]' to 'Namespace.ObjectName'
error CS0029: Cannot implicitly convert type 'Namespace.ObjectName' to 'Namespace.ObjectName[]'
Так что похоже, что программа пытается перейти от массива к объекту и обратно к массиву, но я не совсем уверен. Сгенерированный автоматически код класса - это огромный беспорядок, который трудно преодолеть. Я надеюсь, что, может быть, здесь есть что-то простое, чего мне не хватает.
Спасибо!