Генерация классов C # из XSD / XML и использование инструмента XSD - PullRequest
0 голосов
/ 19 сентября 2019

Я получаю данные из сторонних сервисов, например, GetStores, GetStore, GetEmployee и т. Д., URL-адреса которых сделаны в зависимости от моих требований, например

http://service/getstores

http://service/getemployee/123

и т.д..Я использую HttpWebRequest для выполнения этих операций

var hwr = (HttpWebRequest)WebRequest.Create(url);
CredentialCache cc = new CredentialCache();

cc.Add(new Uri(url), "Basic", new NetworkCredential(uname, pword));
hwr.Credentials = cc;
hwr.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(uname+pword)));

var resp = (HttpWebResponse)hwr.GetResponse();

Для начала я посмотрел на каждый XSD для каждого сервиса (GetStores, GetStore, GetEmployee и т. Д. Я думаю, что был еще один XSD, в котором есть ссылки навсе остальные XSD, которые я пропустил и сделал каждый сервис в отдельности) преобразовали его в XML - преобразовали классы XML в C #.Используя онлайн-сервисы (т. Е. http://xmltocsharp.azurewebsites.net/)

, я передаю каждый класс и возвращаю ответ из приведенного выше кода.

private static T GetStoreInfo<T>(string strResponse)
    {
        XmlSerializer xs= new XmlSerializer(typeof(T));
        StringReader sr= new StringReader(strResponse);
        T body = (T)xs.Deserialize(sr);
        return obj;
    }

Проблема, с которой я, похоже, сталкиваюсь, возникает сейчас изатем я получаю запись, которая выдает мне ошибку, такую ​​как «В XML-документе (1, 40) имеется ошибка. Внутреннее исключение: -« xx не ожидалось ».« или подобные ошибки, которые указывают, чточто-то не так.

Я думаю, что классы генерируются неправильно, или даже XML не корректен для генерации классов C # с помощью онлайн-сервиса.

Поэтому я попытался использовать XSD, которыйсоздал класс, но это был один огромный класс. Свойства были примерно такими:

employee employeeType employeeDepartment employeeMedical

Итак, для начала я передал employee в приведенном выше коде, но это не анализирует.

  1. Есть мысли о том, что я делаю не так, или я должен вернуться к рабочему классу, а затем вручную добавить необходимые свойства / классы?

  2. У меня нет рабочего примера использования XSD таким образом, поэтому я не уверен, стоит ли мне попробовать еще раз (в таком случае я не могу найти никаких примеров, которым следует следовать, как разобрать XMLполучил)?

Примите во внимание любые другие идеи по этому вопросу.

Редактировать

Временная ссылка для XSD: http://webservices.vebra.com/export/xsd/v11/propertyexport.xsd

Созданный мной класс находится по адресу

https://rextester.com/ASW40990

1 Ответ

0 голосов
/ 23 сентября 2019

xsd ссылается на группу других xsd с и использует типы из них: propstatus, rmqualifier, предоставленный и т. Д. В автоматически сгенерированном классе все они просто string s.Однако, если они определены как xs:complexType, они могут иметь дочерние элементы, и вы получите ошибку во время выполнения при десериализации.

Убедитесь, что у вас есть все ссылки xsd, доступные для инструмента , который генерирует классы c #.В качестве альтернативы вы можете встроить все импортированные xsd s и использовать 'uber' xsd для генерации классов с онлайн-сервисом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...