Класс ошибки ru curs showcase util xml xmlformatexception

package ru.curs.showcase.util;

import java.io.*;

import java.util.*;

import javax.servlet.http.*;

import org.slf4j.*;

import ru.curs.showcase.app.api.event.CompositeContext;

import ru.curs.showcase.runtime.AppInfoSingleton;

import com.google.gwt.user.client.rpc.SerializationException;

import com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader;

/**

* Вспомогательные функции для работы с сервлетами.

*

* @author den

*

*/

public final class ServletUtils {

private static final String CANT_WRITE_RESPONSE_ERROR =

«Невозможно вернуть ошибку в HTTP response»;

/**

* Идентификатор сессии для модульных тестов.

*/

public static final String TEST_SESSION = «testSession»;

private static final Logger LOGGER = LoggerFactory.getLogger(ServletUtils.class);

private ServletUtils() {

throw new UnsupportedOperationException();

}

/**

* Подготавливает карту с параметрами URL. При подготовке учитывается то,

* что русские параметры URL считываются сервером в кодировке ISO-8859-1 при

* том, что в реальности они приходят либо в UTF-8 либо в СP1251, а также

* тот факт, что установка req.setCharacterEncoding(«ISO-8859-1») не

* помогает для параметров из URL (хотя помогает для параметров HTML формы).

*

* @param req

* — http запрос.

*/

public static SortedMap<String, List<String>>

prepareURLParamsMap(final HttpServletRequest req) throws UnsupportedEncodingException {

SortedMap<String, List<String>> result = new TreeMap<>();

@SuppressWarnings(«unchecked»)

Iterator<String> iterator = req.getParameterMap().keySet().iterator();

while (iterator.hasNext()) {

String oldKey = iterator.next();

String key = checkAndRecodeURLParam(oldKey);

String[] oldValues = (String[]) req.getParameterMap().get(oldKey);

ArrayList<String> values = new ArrayList<>();

for (int i = 0; i < oldValues.length; i++) {

values.add(checkAndRecodeURLParam(oldValues[i]));

}

result.put(key, values);

}

return result;

}

public static CompositeContext prepareURLParamsContext(final HttpServletRequest request)

throws UnsupportedEncodingException {

Map<String, List<String>> params = ServletUtils.prepareURLParamsMap(request);

return new CompositeContext(params);

}

/**

* Стандартный обработчик ошибки в сервлете.

*

* @param response

* — ответ.

* @param message

* — сообщение об ошибке.

* @param needOKStatus

* — указание на то, что статус ответа должен быть OK, несмотря

* на ошибку.

* @throws IOException

*/

public static void fillErrorResponce(final HttpServletResponse response, final String message,

final boolean needOKStatus) throws IOException {

if (!response.isCommitted()) {

response.reset();

doNoCasheResponse(response);

if (needOKStatus) {

response.setStatus(HttpServletResponse.SC_OK);

} else {

response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

}

makeResponseFromString(response, message);

} else {

if (AppInfoSingleton.getAppInfo().isEnableLogLevelWarning()) {

LOGGER.warn(CANT_WRITE_RESPONSE_ERROR);

}

}

}

/**

* Стандартная функция для записи ответа сервера из переданной строки. Код

* статуса должен быть установлен до вызова этой функции, т.к. она закрывает

* поток записи ответа.

*

* @param response

* — объект ответа сервера.

* @param message

* — текст для записи в тело ответа.

* @throws IOException

*/

public static void makeResponseFromString(final HttpServletResponse response,

final String message) throws IOException {

response.setContentType(«text/html»);

makeStdResponse(response, message);

}

public static void makeXMLResponseFromString(final HttpServletResponse response,

final String message) throws IOException {

response.setContentType(«text/xml»);

makeStdResponse(response, message);

}

protected static void

makeStdResponse(final HttpServletResponse response, final String message)

throws IOException {

response.setCharacterEncoding(TextUtils.DEF_ENCODING);

try (PrintWriter writer = response.getWriter()) {

writer.append(message);

}

}

/**

* Определяет, является ли браузер пользователя «старой версией IE».

* «Старыми» считаются 6 и 7 IE.

*

* @param request

* — HttpServletRequest.

* @return — результат проверки.

*/

public static boolean isOldIE(final HttpServletRequest request) {

String userAgent = getUserAgent(request);

boolean isOldIE =

(userAgent.indexOf(«msie 6.0») != —1) || (userAgent.indexOf(«msie 7.0») != —1);

return isOldIE;

}

public static String getUserAgent(final HttpServletRequest request) {

return request.getHeader(«User-Agent»).toLowerCase();

}

/**

* Возвращает содержимое реквеста в виде строки. Применяется для обработки

* submission с X-форм.

*

* @param request

* реквест

* @return — строку с содержимым.

*/

public static String getRequestAsString(final HttpServletRequest request)

throws java.io.IOException {

InputStream is = request.getInputStream();

return TextUtils.streamToString(is);

// String line;

//

// try (BufferedReader requestData =

// new BufferedReader(new InputStreamReader(is,

// TextUtils.DEF_ENCODING))) {

// StringBuffer stringBuffer = new StringBuffer();

// while ((line = requestData.readLine()) != null) {

// stringBuffer.append(line);

// }

// line = stringBuffer.toString();

// }

// return line;

}

/**

* Функция устанавливает у response сервера атрибуты, предотвращающие

* кэширование результатов запроса в различных браузерах и прокси-серверах.

*

* @param resp

* — response (ответ сервера).

*/

public static void doNoCasheResponse(final HttpServletResponse resp) {

resp.setHeader(«Pragma», «no-cache»);

resp.setHeader(«Cache-Control», «must-revalidate,no-store,no-cache»);

resp.setDateHeader(«Expires», 0);

}

/**

* Проверяет параметр на неверную кодировку ANSIISO вместо UTF8 и

* исправляет ее при необходимости.

*

* @param param

* — параметр.

* @return — правильно кодированный параметр.

* @throws UnsupportedEncodingException

*/

public static String checkAndRecodeURLParam(final String param)

throws UnsupportedEncodingException {

String enc = UTF8Checker.getRealEncoding(param);

if (!TextUtils.DEF_ENCODING.equals(enc)) {

return TextUtils.recode(param, enc, TextUtils.DEF_ENCODING);

}

return param;

}

/**

* Функция десериализации объекта, переданного в теле запроса.

*

* @param data

* — строка с urlencoded объектом.

* @return — объект.

* @throws SerializationException

*/

public static Object deserializeObject(final String data) throws SerializationException {

ServerSerializationStreamReader streamReader =

new ServerSerializationStreamReader(Thread.currentThread().getContextClassLoader(),

null);

streamReader.prepareToRead(data);

return streamReader.readObject();

}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
<?xml version="1.0" encoding="UTF-8"?>
<report>
    <eeprom version="ENHANCED PBB/ЂB cor/dens v10.12" datetime=""></eeprom>
    <sn>015.15.01.002</sn>
    <file path="internalanalog.tar" type="tar">
        <point>
            <x>-11,0000000</x>
            <y>1,6000000</y>
        </point>
        <point>
            <x>-0,0500000</x>
            <y>0,0000000</y>
        </point>
    </file>
    <file path="externaldensity.cor" type="cor">
        <surface>
            <a0>94,5305710</a0>
            <a1>-0,0142365</a1>
            <a2>-0,0043975</a2>
            <a11>-0,0000980</a11>
            <a22>0,0001461</a22>
            <a12>-0,0000220</a12>
            <p>1,0000000</p>
        </surface>
        <surface>
            <a0>-266,8311768</a0>
            <a1>-3,8060381</a1>
            <a2>1,8994861</a2>
            <a11>0,0000000</a11>
            <a22>0,0000000</a22>
            <a12>0,0000000</a12>
            <p>3,0000000</p>
        </surface>
        <surface>
            <a0>0,0000000</a0>
            <a1>0,0000000</a1>
            <a2>0,0000000</a2>
            <a11>-0,0004314</a11>
            <a22>0,0000001</a22>
            <a12>0,0000000</a12>
            <p>6,0000000</p>
        </surface>
        <surface>
            <a0>-13,4954958</a0>
            <a1>0,0428321</a1>
            <a2>-0,0312684</a2>
            <a11>0,0000000</a11>
            <a22>0,0000000</a22>
            <a12>0,0000000</a12>
            <p>7,0000000</p>
        </surface>
        <surface>
            <a0>1000,0000000</a0>
            <a1>0,0000000</a1>
            <a2>100,0000000</a2>
            <a11>0,1000000</a11>
            <a22>10,0000000</a22>
            <a12>0,1000000</a12>
            <p>5,0000000</p>
        </surface>
    </file>
    <file path="internalpressure.tar" type="tar">
        <point>
            <x>2360,0000000</x>
            <y>0,0000000</y>
        </point>
        <point>
            <x>3532,0000000</x>
            <y>58,4000015</y>
        </point>
        <point>
            <x>4547,0000000</x>
            <y>103,8000031</y>
        </point>
        <point>
            <x>5764,0000000</x>
            <y>158,6999969</y>
        </point>
        <point>
            <x>6877,0000000</x>
            <y>209,0000000</y>
        </point>
        <point>
            <x>7900,0000000</x>
            <y>255,1999969</y>
        </point>
        <point>
            <x>8982,0000000</x>
            <y>304,0000000</y>
        </point>
        <point>
            <x>10074,0000000</x>
            <y>352,7999878</y>
        </point>
        <point>
            <x>11149,0000000</x>
            <y>400,8999939</y>
        </point>
    </file>
    <file path="externaldensity.tar" type="tar">
        <point>
            <x>0,8943808</x>
            <y>0,0000000</y>
        </point>
        <point>
            <x>1,0004297</x>
            <y>1,0000000</y>
        </point>
        <point>
            <x>1,0124259</x>
            <y>1,1160001</y>
        </point>
        <point>
            <x>1,0233793</x>
            <y>1,2240000</y>
        </point>
        <point>
            <x>1,0292079</x>
            <y>1,2840000</y>
        </point>
        <point>
            <x>1,0409085</x>
            <y>1,4030000</y>
        </point>
        <point>
            <x>1,0498325</x>
            <y>1,4930000</y>
        </point>
        <point>
            <x>1,0583036</x>
            <y>1,5800000</y>
        </point>
        <point>
            <x>1,0686287</x>
            <y>1,6900001</y>
        </point>
        <point>
            <x>1,0780404</x>
            <y>1,7860010</y>
        </point>
        <point>
            <x>1,0865008</x>
            <y>1,8940001</y>
        </point>
        <point>
            <x>1,0918074</x>
            <y>1,9540000</y>
        </point>
    </file>
    <file path="externalcoriol.tar" type="tar">
        <point>
            <x>0,0000000</x>
            <y>0,0000000</y>
        </point>
        <point>
            <x>1,0423599</x>
            <y>8,8731651</y>
        </point>
    </file>
    <file path="externalrotate.tar" type="tar">
        <point>
            <x>0,2771824</x>
            <y>0,0000000</y>
        </point>
        <point>
            <x>51,5987129</x>
            <y>-0,8832195</y>
        </point>
        <point>
            <x>102,9263687</x>
            <y>-2,8315117</y>
        </point>
        <point>
            <x>161,3097382</x>
            <y>-4,0044746</y>
        </point>
        <point>
            <x>203,9690857</x>
            <y>-3,2529044</y>
        </point>
        <point>
            <x>250,3599396</x>
            <y>-4,8435221</y>
        </point>
        <point>
            <x>302,4907227</x>
            <y>-6,9018602</y>
        </point>
        <point>
            <x>351,8223267</x>
            <y>-5,4620886</y>
        </point>
        <point>
            <x>396,1837158</x>
            <y>-6,5484858</y>
        </point>
    </file>
    <file path="internalrgr.tar" type="tar">
        <point>
            <x>1,0000000</x>
            <y>0,0000000</y>
        </point>
        <point>
            <x>1,1160051</x>
            <y>-7,7440825</y>
        </point>
        <point>
            <x>1,2240053</x>
            <y>-4,7421026</y>
        </point>
        <point>
            <x>1,2839999</x>
            <y>-1,4837382</y>
        </point>
        <point>
            <x>1,4029999</x>
            <y>0,6799557</y>
        </point>
        <point>
            <x>1,4930004</x>
            <y>3,0734160</y>
        </point>
        <point>
            <x>1,5800005</x>
            <y>4,8079190</y>
        </point>
        <point>
            <x>1,6899979</x>
            <y>6,9035168</y>
        </point>
        <point>
            <x>1,7860079</x>
            <y>7,7395725</y>
        </point>
        <point>
            <x>1,8939825</x>
            <y>9,9293804</y>
        </point>
        <point>
            <x>1,9540000</x>
            <y>8,4871855</y>
        </point>
    </file>
    <file path="internalCorKRoP.tar" type="tar">
        <point>
            <x>0,0000000</x>
            <y>1,0000000</y>
        </point>
        <point>
            <x>1,0000000</x>
            <y>1,0000000</y>
        </point>
    </file>
</report>

Я получаю XML-строку от контроллера моего веб-API, который построен, как показано:

private string CreateXDoc(IEnumerable<PassedJSONConverted> passed)
{
XNamespace xmlns = "http://host.adp.com";
var doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
var jobListElement = new XElement(xmlns + "JobXML");
foreach (var objectItem in passed)
{
var loopElement = new XElement(xmlns + "JobsXML", new XElement(xmlns + "ID", objectItem.ID.ToString()), new XElement(xmlns + "Name", objectItem.Name), new XElement(xmlns + "Age", objectItem.Age.ToString()), new XElement(xmlns + "JobTitle", objectItem.JobTitle), new XElement(xmlns + "StartDate", objectItem.StartDate));
jobListElement.Add(loopElement);
}
doc.Add(jobListElement);
//Format without n's
return doc.ToString(SaveOptions.DisableFormatting);
}

Это хорошо, и XML установлен как показано:

- <JobXML xmlns="http://host.xxx.com">
- <JobsXML>
<ID>1</ID> 
<Name>Dave</Name> 
<Age>23</Age> 
<JobTitle>Developer</JobTitle> 
<StartDate>10/24/2013 6:40:28 AM</StartDate> 
</JobsXML>
- <JobsXML>
<ID>2</ID> 
<Name>John</Name> 
<Age>44</Age> 
<JobTitle>QA</JobTitle> 
<StartDate>10/24/2013 6:40:28 AM</StartDate> 
</JobsXML>
- <JobsXML>
<ID>3</ID> 
<Name>Dave</Name> 
<Age>23</Age> 
<JobTitle>Senior Developer</JobTitle> 
<StartDate>10/24/2013 6:40:28 AM</StartDate> 
</JobsXML>
</JobXML>

Когда я возвращаю это как строку и пытаюсь выполнить ее синтаксический анализ на xDoc, как показано ниже:

private static string HandleResponse(HttpWebResponse httpResponse)
{
using (var responseReader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8))
{
string responsePayload = responseReader.ReadToEnd();
var newxDoc = XDocument.Parse(responsePayload);
return responsePayload;
}
}

Строка ‘responsePayLoad’ во время выполнения устанавливается как показано:

 "<JobXML xmlns="http://host.adp.com"><JobsXML><ID>1</ID><Name>Dave</Name><Age>23</Age><JobTitle>Developer</JobTitle><StartDate>10/24/2013 6:45:22 AM</StartDate></JobsXML><JobsXML><ID>2</ID><Name>John</Name><Age>44</Age><JobTitle>QA</JobTitle><StartDate>10/24/2013 6:45:22 AM</StartDate></JobsXML><JobsXML><ID>3</ID><Name>Dave</Name><Age>23</Age><JobTitle>Senior Developer</JobTitle><StartDate>10/24/2013 6:45:22 AM</StartDate></JobsXML></JobXML>"

Это дает мне исключение в объекте ‘newxDoc’:

XmlException не обрабатывается. Данные на корневом уровне недействительны. Строка 1, позиция 1.

Может ли кто-нибудь сказать мне, где я ошибаюсь?

Наследование:
System.ApplicationException

Показать файл
Открыть проект

Открытые методы

Метод Описание
XmlFormatException ( string message ) : System

Описание методов

XmlFormatException()
публичный метод

public XmlFormatException ( string message ) : System
message string
Результат System

Я обнаружил, что в моем коде существует "&", почему ошибка показывает

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(dsExport.Tables[0].Rows[i]["SubmissionData"].ToString());

«&» есть в представлении данных. Как удалить специальные символы, чтобы ошибка не отображалась снова?

Заранее спасибо

Поделиться

Источник

4 ответа

Microsoft DN

Поделиться

Try:

XmlDocument xmlDoc = new XmlDocument();
string str  = dsExport.Tables[0].Rows[i]["SubmissionData"].ToString();
str = System.Web.HTTPUtility.HTMLDecode(str);
xmlDoc.LoadXml(str);

Pål Thingbø

Поделиться

& не является незаконным символом XML. Это не ваша проблема. Вам нужно зарегистрировать полученный XML-код, прежде чем вы спросите кого-нибудь о вашей проблеме. Вероятно, вам нужно

HTTPUtility.HTMLDecode(yourformdata)

Но я очень хорошо чувствую SQL-инъекцию.

Pål Thingbø

Поделиться

Извините, я слишком поздно отвечаю, но надеюсь, что это поможет некоторым другим парням. Эта проблема связана с кодировкой специальных символов в XML. Пожалуйста, найдите приведенную ниже ссылку, которая может вам помочь https://support.google.com/checkout/sell/answer/70649?hl=en
Благодаря,
Виджай Шерекар

Vijay

Поделиться

Ещё вопросы

  • 0Mysql — выбрать случайные 4 данных из столбца, отличного от 2 различных столбцов
  • 1Шаблон наблюдателя в Android
  • 1различная точность числового текста в зависимости от числового значения
  • 1Кнопка маршрутизации не работает в Angular 2
  • 0jQuery Mobile: уберите метку с диапазона и сделайте слайдер шире
  • 1Javascript document.cookie = «ключ = значение» добавляется вместо замены
  • 1Добавить дочерний элемент в свойства класса в течение цикла
  • 0PHP-код по умолчанию с ошибкой, когда это не должно быть
  • 0Angularjs: элементы массива Sum для диаграмм
  • 1Переименование файлов с косой чертой в имени файла (python)
  • 0Какую версию Nsight можно использовать в CUDA5.5 в VisualStudio2010?
  • 1Схема <[объект объекта]> уже существует с другим определением
  • 1Как открыть конкретный экран после нажатия на уведомление?
  • 0PHP exec () с URL?
  • 1Как перенаправить поток Request.Content
  • 1Удаление nltk стоп-слов из строк csv DataFrame
  • 0c ++ вектор векторов размера следующего столбца
  • 1HTTP-обработчик без ответа
  • 0JQuery Datepicker: как отрицать это, используя мой CSS
  • 0Chrome заблокирован localhost с ошибкой ваше соединение не является частным
  • 0нажмите следующую страницу [Выбрать форму]
  • 0Читать сырой сокет ip заголовок? C ++
  • 1HTML 5 Геолокация не работает в Safari
  • 0Как преобразовать результат хранимой процедуры MySQL в данные JSON в сценарии оболочки?
  • 1Таймер JavaScript для использования несколько раз на странице
  • 0JQuery Назначение разницы ширины для элементов <li>
  • 0Карты Google — Использование Заменить
  • 1Правильный способ передачи ошибок обратно в вызывающий код
  • 1Как проверить все флажки в списке флажков при первой загрузке страницы?
  • 1Изменить параметр URL
  • 1Диапазоны подстрок (Java)
  • 1KeyboardInterrupt несколько потоков одновременно
  • 1Удаление смежных дубликатов в ArrayList [Java]
  • 0INNER JOIN полезен здесь? [Дубликат]
  • 1Как добавить различные editText в один TextView
  • 1Как получить имя целевой функции из склеарна `Bunch`
  • 1отображать необъектные значения во вложенных массивах в javascript
  • 0почему это JQuery не добавляет правильные значения в моей БД
  • 1Во время вызова OnActionExecuting for Web API — Как сопоставить контроллер / класс действия из строки маршрута для чтения атрибутов действия
  • 1преобразовать данные массива из объекта / float в int для использования в методе
  • 1Назначение «name» и «defaults» в config.Routes.MapHttpRoute
  • 0Вставка CSS-идентификатора в jQuery
  • 0Повторная вставка div в форму после удаления div из формы (диалоговое окно jQuery ui)
  • 1Как получить секунды с эпохи без связи со временем устройства? [Дубликат]
  • 1Как удалить все неиспользуемые переменные в WebStorm?
  • 0Перезагрузка угловых / ионных повторов
  • 0Оставил соединение, мне нужно объяснение о коде
  • 0При использовании Angular с SignalR, как я могу уведомить контроллер, когда в объект вносится изменение?
  • 0как проверить, существует ли имя пользователя в angularjs

Сообщество Overcoder

Search code, repositories, users, issues, pull requests…

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

I have the following XML response I am trying to deserialize using XmlSerializer. When I remove the call to XML serializer I throw no errors. Every time I use XmlSerializer I get
an exception. What am I missing?

Exception is:

System.Xml.XmlException: Root element is missing.
  at System.Xml.XmlTextReaderImpl.Throw(Exception e)
  at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
  at System.Xml.XmlTextReaderImpl.Read()
  at System.Xml.XmlTextReader.Read()
  at System.Xml.XmlReader.MoveToContent()
  at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderSubmitReportResponse.Read5_NeweggAPIResponse()

Xml Doc is:

<?xml version="1.0" encoding="utf-8"?>
<NeweggAPIResponse>
    <IsSuccess>true</IsSuccess>
    <OperationType>OrderListReportResponse</OperationType>
    <SellerID>myID</SellerID>
    <ResponseBody>
        <ResponseList>
            <ResponseInfo>
                <RequestId>XXXXXXXX</RequestId>
                <RequestType>ORDER_LIST_REPORT</RequestType>
                <RequestDate>07/26/2012 09:27:06</RequestDate>
                <RequestStatus>SUBMITTED</RequestStatus>
            </ResponseInfo>
        </ResponseList>
    </ResponseBody>
</NeweggAPIResponse>

My call to XmlSerializer is:

XmlSerializer serializer = new XmlSerializer(typeof(SubmitReportResponse));
reportReq = serializer.Deserialize(respStream) as SubmitReportResponse;

SubmitReportResponse class is:

    public enum RequestStatus
{
    ALL,
    SUBMITTED,
    IN_PROGRESS,
    FINISHED,
    CANCELLED
}

/// <summary>
/// TODO: Update summary.
/// </summary>
[XmlRoot("NeweggAPIResponse")]
public class SubmitReportResponse
{
    public string IsSuccess { get; set; }
    public string OperationType { get; set; }
    public string SellerID { get; set; }
    public ReportResponseBody ResponseBody { get; set; }

    public SubmitReportResponse()
    {
        ResponseBody = new ReportResponseBody();
    }
}

public class ReportResponseBody
{
    public string Memo { get; set; }
    public ReportResponseList[] ResponseList { get; set; }   



    public ReportResponseBody()
    {

        ResponseList = new ReportResponseList[0];
    }
}

public class ReportResponseList
{
    public ResponseInfo[] ResponseInfo { get; set; }

    public ReportResponseList()
    {
        ResponseInfo = new ResponseInfo[0];
    }

}

public class ResponseInfo
{
    public string RequestId { get; set; }
    public string RequestType { get; set; }
    public string RequestDate { get; set; }
    public RequestStatus RequestStatus { get; set; }

    public ResponseInfo()
    {
        RequestStatus = new RequestStatus();
    }
}

EDIT:

Requesting Code:

            HttpWebRequest request = WebRequest.Create(endpoint) as HttpWebRequest;
            request.Proxy = null;
            request.Method = "POST";
            //Specify the xml/Json content types that are acceptable. 
            request.ContentType = "application/xml";
            request.Accept = "application/xml";

            //Attach authorization information
            request.Headers.Add("Authorization", apikey);
            request.Headers.Add("Secretkey", secretkey);

            GetOrderListRequest requestObj = new GetOrderListRequest();
            requestObj.OperationType = OperationType.OrderListReportRequest;
            requestObj.RequestBody = new OrderListRequestBody();
            requestObj.RequestBody.OrderReportCriteria = new OrderReportCriteria();
            requestObj.RequestBody.OrderReportCriteria.Status = 3;
            requestObj.RequestBody.OrderReportCriteria.KeywordsType = 0;
            requestObj.RequestBody.OrderReportCriteria.OrderDateFrom = "2012-01-01";
            requestObj.RequestBody.OrderReportCriteria.OrderDateTo = "2012-07-26";
            requestObj.RequestBody.OrderReportCriteria.OrderDownloaded = "false";

            string requestBody = SerializeToString(requestObj);

            byte[] byteStr = Encoding.UTF8.GetBytes(requestBody);
            request.ContentLength = byteStr.Length;

            using (Stream stream = request.GetRequestStream())
            {
                stream.Write(byteStr, 0, byteStr.Length);
            }

            //Parse the response
            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                //Business error
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    Console.WriteLine(string.Format("Error: response status code is{0}, at time:{1}", response.StatusCode, DateTime.Now.ToString()));

                    return;
                }
                else if (response.StatusCode == HttpStatusCode.OK)//Success
                {
                    using (Stream respStream = response.GetResponseStream())
                    {
                        StreamReader readerOK = new StreamReader(respStream);
                        //Console.WriteLine(String.Format("Result:{0}", DateTime.Now.ToString()));
                        Console.WriteLine(String.Format("{0}", readerOK.ReadToEnd()));

                        XmlSerializer serializer = new XmlSerializer(typeof(SubmitReportResponse));
                        reportReq = serializer.Deserialize(respStream) as SubmitReportResponse;
                    }
                }
            }


    public string SerializeToObj(object obj)
    {

        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("", "");
        XmlWriterSettings settings = new XmlWriterSettings();
        settings.OmitXmlDeclaration = true;
        settings.Encoding = new UTF8Encoding(false);
        settings.Indent = true;
        XmlSerializer xs = new XmlSerializer(obj.GetType());
        MemoryStream ms = new MemoryStream();

        // xs.Serialize(ms, obj,ns);


        XmlWriter writer = XmlWriter.Create(ms, settings);
        xs.Serialize(writer, obj, ns);

        return Encoding.UTF8.GetString(ms.ToArray());
    }

Resolution:

It seems that calling Console.WriteLine(String.Format("{0}", readerOK.ReadToEnd())); causes the stream to be consumed and be unavailable for serialization. Removing this line allowed me to properly serialize the XML into my classes.

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Класс ошибки cobjexception
  • Ккт штрих м ошибка часов
  • Классификация ошибок переводчика
  • Класс ошибка 404
  • Классификация ошибок паскаль

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: