Я немного из своего элемента. Я использовал xsd.exe для создания схемы xsd из xml-файла, а затем для создания класса C# из этого xsd. Кажется, все работает нормально.Проблема десериализации проверенного XML, не может преобразовать в/из массива
На данный момент я просто пытаюсь получить десериализацию XML. Файл, который я десериализую, если тот же самый файл, который я использовал для первоначального создания класса. Вот мой код:
String [email protected]"C:\Users\tol56881\Documents\dnd4e.xsd";
String [email protected]"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[]'
Так что, похоже, программа пытается перейти от массива к объекту и обратно в массив, но я не уверен. Автоматически созданный код класса - это огромный беспорядок, который трудно проскочить. Я надеюсь, что, может быть, здесь есть что-то простое.
Спасибо!
Хмм, разбор DDI Character Builder файлы? Я посмотрю позже и посмотрю, могу ли я предложить какие-то мысли. –
Действительно. Они были достаточно любезны в последнем обновлении, чтобы сделать файлы XML более дружественными к третьим сторонам, поэтому подумал, что я возьму их на себя. Мне удалось это исправить. О том, чтобы добавить подробности об исправлении, хотя я оставляю проблему открытой, так как я не понимаю, почему проблема возникла в первую очередь. – Asmor
Это старый вопрос, но все еще действительный, и вот больше информации, если кто-то еще сталкивается с этим: http://blog.coderunnr.com/2012/06/net-xmlserializer-unable-to-generate-a-temporary-class /. Сообщение включает немного более элегантное решение (добавление атрибута к схеме) с примером. Проблема на самом деле является ошибкой в XmlSerializer .NET: http://connect.microsoft.com/VisualStudio/feedback/details/349967/xsd-exe-generates-code-with-the-wrong-type-in-an-xmlarrayitemattribute – spork