как попросить XSD.exe создать правильный класс для меня, чтобы я мог создать прекрасный XML - PullRequest
2 голосов
/ 18 мая 2011

Я создал XSD-файл из Visual Studio 2010,

Затем я использую xsd /c mydemo.xsd для генерации класса для себя, чтобы я мог создать файл XML во время выполнения.

ОднакоКогда я использую этот класс, заполняю некоторые значения и сериализую объект, мне не нравится XML-файл.

Вот мой XSD-файл Нажмите здесь, чтобы увидеть

Я ожидал, что XML-файл будет Нажмите здесь, чтобы увидеть (Сгенерировано из Visual Studio «Образец XML»)

Но когда я пытаюсь его сериализовать, XML-файлэто как Нажмите здесь, чтобы увидеть

Формат совершенно другой

Например,

Ожидается:

<ColumnInfo> 
  <Column Type="Type1" DisplayValue="DisplayValue1" Key="Key1"/> 
  <Column Type="Type2" DisplayValue="DisplayValue2" Key="Key2"/> 
  <Column Type="Type3" DisplayValue="DisplayValue3" Key="Key3"/> 
</ColumnInfo>

, норезультат генерации выглядит следующим образом:

<columnInfoField>
  <ColumnType>
    <displayValueField>Display value for key 1</displayValueField>
    <keyField>key1</keyField>
    <typeField>string</typeField>
  </ColumnType>
  <ColumnType>
    <displayValueField>Display value for key 2</displayValueField>
    <keyField>key2</keyField>
    <typeField>int</typeField>
  </ColumnType>
  <ColumnType>
    <displayValueField>Display value for key 3</displayValueField>
    <keyField>key3</keyField>
    <typeField>long</typeField>
  </ColumnType>
</columnInfoField>

И код, который я реализую для сериализации отчета:

http://msdn.microsoft.com/en-us/library/ms731073.aspx

DataContractSerializer dcs = new DataContractSerializer(typeof(Report));
using (XmlDictionaryWriter xdw = XmlDictionaryWriter.CreateTextWriter(File.Create(@"C:\demo\schema\output.xml"), Encoding.UTF8))
{
  dcs.WriteObject(xdw, report);
}

Не уверен, почему я не могу использовать«XmlSerializer», когда я его использую, будет жаловаться на то, что не может привести тип массива к чему-либо ...

Невозможно создать временный класс (повторноsult = 1).
ошибка CS0030: невозможно преобразовать тип 'ColumnValueType []' в "ColumnValueType"
ошибка CS0029: невозможно неявное преобразование типа "ColumnValueType" в "ColumnValueType []"

Так, кто-нибудь может дать мне несколько советов, как я могу исправить свой формат XML ???

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

Существует ошибка на xsd.exe - посмотрите на этот пост: http://satov.blogspot.com/2006/12/xsdexe-generated-classes-causing.html

0 голосов
/ 18 мая 2011

Сериализатор контракта данных имеет другие правила, чем XmlSerializer.Почему бы вам сначала не попробовать XmlSerializer, а затем посмотреть, является ли вывод «правильным».

...