Не удалось создать временный класс (результат = 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 и заменить на()