Не удалось создать временный класс (результат = 1). Ошибка CS0030: Невозможно преобразовать тип "Тип []" в "Тип"?

Я получаю эту ошибку после создания класса из моего xsd файла с помощью инструмента xsd.exe. Поэтому я обыскал сеть и нашел решение. Вот ссылка: http://satov.blogspot.com/2006/12/xsdexe-generated-classes-causing.html

Проблема в том, что это заставляет код работать, но как-то десериализованные данные кажутся коррумпированными. Я сделал то, что предлагает сайт, и, в конце концов, измерение 2-го массива всегда пусто (см. Комментарии к сайту, у кого-то тоже была эта проблема). Вопрос в том, как решить эту проблему сейчас? Есть ли другой инструмент для создания xsd файла? Я пробовал Xsd2Code без успеха.

Спасибо: -)

Ответ 1

Вам нужно изменить тип переменной-члена в сериализованном классе. Например, если он вызывает ошибку, например:

Невозможно создать временный класс (result = 1). error CS0030: Невозможно преобразовать тип 'Data []' в 'Data'.

Я запустил поиск по имени типа данных в сгенерированном файле, и нашел следующее:

[System.Xml.Serialization.XmlArrayItemAttribute("Data", typeof(Data), IsNullable=false)]
public Data[][] Row

Заменить Data[][] на Data[]. Измените тип данных из 2D-массива на 1D-массив. Это решит вашу проблему.:)

Ответ 2

Имел ту же проблему, но Xsd2Code не интегрировался с VS2012. Поэтому вместо этого я пошел в файл xcs.exe сгенерированный файл .cs и сделал:

Найти [] [] Заменить []

который работал.

Ответ 3

Я получил эту ошибку. В вашем решении есть файл reference.cs в этом файле, который вам нужно найти "[] []", и тогда в нем будет два результата.

После того, как вам нужно удалить один "[]" из "[] []" из обоих мест.

Это работает для меня..

Спасибо..

Ответ 4

Добавить <xs:attribute name="tmp" type="xs:string" /> после каждого
<xs:sequence maxOccurs="unbounded"> <xs:element ../> </xs:sequence>
и
<xs:sequence> <xs:element maxOccurs="unbounded"/> </xs:sequence>
элемент в файле схемы , если вы не хотите потерять размер массива.

Ответ 5

Для меня это помогает исправить XML, используемый для генерации кода. Это происходит, когда:

<Names>
    <Name></Name>
    <Name></Name>
</Names>

то это оптимизируется с помощью xsd для двойного ввода имени массива

Что я сделал:

<Names>
    <Dummy></Dummy>
    <Name></Name>
    <Name></Name>
</Names>

xsd не оптимизирует его, но оставляет имя единственного массива

Ответ 6

В моем случае проблемы из-за недопустимого объявления для атрибута свойства XmlArrayItem.

Из

[XmlArrayItem("MyArray", typeof(string))]
public List<ClassName> Items{ get; set; }

Я изменил с соответствующим типом: от строки до ClassName

[XmlArrayItem("MyArray", typeof(ClassName))]
public List<ClassName> Items{ get; set; }

Надеюсь, это поможет!

Ответ 7

Если это в VB.net, то вам нужно искать()() в вашем Reference.vb и заменить на()