2012-03-08 3 views
1

У меня есть приложение .NET webforms, которое использует данные из веб-службы WCF/REST. В большинстве случаев мы используем общие классы для передачи данных взад и вперед, и это работает хорошо.Преобразование XML в набор данных

Однако иногда нам нужно отображать эти данные в Datagrid или аналогичном элементе управления .NET, и наиболее удобный способ сделать это - через набор данных. Я знаю, что мы можем читать XML в наборе данных, используя метод Dataset.ReadXML (myXML, XmlReadMode.InferTypedSchema), и это работает нормально.

Иногда, InferTypedSchema указывает неверный тип данных. Например, он решит, что почтовый индекс является целым числом, а не строкой.

Какие у меня варианты? Я знаю, что могу вручную определить схему набора данных, но я хотел бы избежать этого, если это возможно. Веб-служба автоматически генерирует .xsd (т. Е. URL автогенерируемого ответа/схемы). Есть ли способ сообщить Dataset.ReadXML, чтобы использовать это? Или есть лучший способ?

ответ

0

Если вы знаете свой XSD раньше времени, вы можете сгенерировать из него файл класса и затем настроить его, чтобы убедиться, что у вас есть нужные типы данных (строки для почтового индекса).

XML Schema Definition Tool (Xsd.exe)

После того, как ваш создать файл класса, вы можете использовать XmlSerializer.Deserialize для преобразования XML в класс.

+0

У меня есть классы, это не проблема. Мне нужен набор данных. – BDW

1

Я знаю, что вы можете кормить DataSet не только с данными, но и со схемой, что-то вроде

dataSet.ReadXmlSchema(new System.IO.StreamReader("schema.xsd")); 

так, если у вас есть XSD должно быть в порядке.

+0

Есть ли способ указать на онлайн-XSD, а не читать его из файла? Я бы хотел избежать повторной генерации схемы, если интерфейс когда-либо изменился. – BDW