Невозможно создать временный класс (результат = 1).Ошибка CS0030: не удается преобразовать тип «Тип []» в «Тип»? - PullRequest
48 голосов
/ 13 июля 2011

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

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

Спасибо: -)

Ответы [ 7 ]

111 голосов
/ 17 октября 2012

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

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

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

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

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

13 голосов
/ 09 декабря 2014

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

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

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

7 голосов
/ 10 мая 2016

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

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

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

Спасибо ..

2 голосов
/ 09 марта 2016

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

1 голос
/ 07 апреля 2017

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

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

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

Что я сделал:

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

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

1 голос
/ 02 марта 2016

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

0 голосов
/ 23 июня 2015

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

С

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

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

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

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

...