У меня есть время, чтобы определиться с направлением работы с библиотекой, которую я создаю.
У меня есть пакет XSD промышленного стандарта, из которого я генерирую объекты .net.Я использовал все XSD.exe, LinqtoXsd, xsd2code и даже OxmLibrary с разными результатами.Но, в конце концов, я могу генерировать классы .net, которые можно сериализовать / десериализовать в соответствии со стандартом.
Однако - API, вызываемый с помощью этого xml (api также является частью стандарта), требует, чтобы запросы также обрабатывались как XML, но с некоторым отклонением от базового XSD, а именно:
-присутствие или отсутствие тега диктует, что определенные поля должны быть «выбраны» или использованы другими способами (обновить, удалить, добавить и т. д.).
- одиночные типы значений в xsd могут повторяться в запросе API "select", чтобы указать эквивалент предложения where для этого поля.
Скорее всего, я собираюсь использовать одну из описанных выше структур генов кода для создания вторичного кода для объекта типа запроса в дополнение к основным объектам данных.
Итак, подходы, которые я рассматриваю для определения и сериализации объектов запроса, включают в себя:
использовать «ручные» методы сериализации, которые могут посмотреть на отдельный объект запроса и определить, какиеполя для включения / исключения, а также могут создавать повторяющиеся теги, если в запросе указано несколько значений.
изменить каждое поле для наследования от базового типа, который учитывает запросы и может выводить правильный xml для каждого элемента.
использовать методы расширения, чтобы у класса были дополнительные методы для каждого поля, которые можно вызывать для указания параметров запроса, и можно повторно использовать объекты данных для создания запросов.
использовать анонимные типы для указания подмножества полей и генерировать запрос XML из этого
В дополнение к этому, мне также нужно вычислитьо том, как взломать ранее упомянутый код gen fremeworks для решения, в каком бы направлении я ни шел.
Я не продумал все это до конца, но подумал, что я бы выполнил это на тот случай, если кто-то проделает аналогичную работу и получит некоторые рекомендации.