2012-06-29 4 views
0

У меня есть несколько XML-вызовов, которые должны быть реализованы на C#. Я использовал Xsd2Code для автоматического создания кода, и я очень доволен результатами. Моя проблема, однако, заключается в том, что все XML-вызовы имеют тот же TypeName ответ на запрос следующим образом:Изменение кода, сгенерированного из схемы XSD

XML Call - 1:

<Request Method="AvailabilityRetrievalRQ"> 
.... 
</Request> 

<Response Method="AvailabilityRetrievalRS"> 
.... 
</Response> 

XML Call - 2:

<Request Method="RateRetrievalRQ"> 
..... 
</Request> 

<Response Method="RateRetrievalRS"> 
.... 
</Response> 

Таким образом, , все 5 XML-вызовов сгенерировали 10 классов - 5 с именем «Request» и 5 с именем «Response». Теперь я знаю, что всегда могу указать TypeName в XmlType как Request и переименовать классы. Я уже это сделал. Мой вопрос в том, хорошо ли изменить сгенерированный код или нет. Это просто переименование классов. Я не обязан ничего менять. Другое решение, о котором я думал, это дать разное пространство имен C# для каждой пары Request-Response. Но у меня плохое представление об этом, похожее на обходное решение.

Что, по вашему мнению, является идеальным решением?

Еще одно сомнение заключается в том, что у меня такая же проблема с внутренними узлами XML. Они имеют одно и то же имя, но различную функциональность и, следовательно, разные структуры, в каждом вызове XML. Например,

XML Call - 1

<Request Method="AvailabilityRetrievalRQ"> 
    <Room ID="XXX" /> 
    ..... 
</Request> 

XML Call - 2

<Request Method="RateRetrievalRQ"> 
    <Room ID="XXX" ProductID="YYY" /> 
    .... 
</Request> 

Прямо сейчас, я решил не пытаться вывезти общие классы только REDUCT кода избыточности. Я предпочел сохранить схему XSD, сопоставленную с автоматически сгенерированными классами, и просто переименовал классы, чтобы избежать конфликта. Например, аналогичные классы номера для приведенного выше примера будет:

XML Call - 1

public partial class AvailabilityRetrievalRQ_Room { } 

XML Call - 2

public partial class RateRetrievalRQ_Room { } 

я делаю неправильно в этом?

ответ

0

Я решил переименовать классы, чтобы код стал читаемым при их использовании. Подход к пространству имен не казался достаточным и с правом идти. Я буду терпеть боль, чтобы сделать это снова, в случае, если мне нужно восстановить классы из схемы.

Смежные вопросы