Странные результаты StreamReader - PullRequest
0 голосов
/ 05 мая 2020

У меня есть задание SSIS с использованием компонента сценария для вызова веб-API с помощью HttpWebRequest, с использованием StreamReader для получения json результата (массива).

Это работало нормально, но после того, как некоторые новые данные были вошел в удаленную систему, моя работа начала давать сбой. TBH Я подозревал какие-то специальные символы, но мне не удалось найти ничего такого.

Вот мои тесты на сегодняшний день ...

(a) Получив ответ, я вырезал строку чтобы получить только первый элемент в массиве - для облегчения отладки. Затем я выплюнул аскибайты, чтобы точно увидеть, что там было.

Используя эту строку, мой сериализатор не работает.

Затем я добавил код в (b). Это жестко закодированная строка, и я плюнул на asciibytes, чтобы сравнить с (а) выше - и они точно такие же. Однако с этим жестко закодированным значением сериализатор работает, и код завершается с улыбкой.

Что мне не хватает ?? (Пожалуйста!)

using (StreamReader reader = new StreamReader(responseStream))
                {
                    jsonString = reader.ReadToEnd(); //.Replace("\\", "");
                    reader.Close();
                }
                jsonString = jsonString.Replace("\\", "");

                //-- TEST ------------------------------------------------
                // (a) cut array to first item only
                int itest = jsonString.IndexOf("},{");
                string stest = jsonString.Substring(0,itest) + "}]";
                byte[] asciiBytes = Encoding.ASCII.GetBytes(stest);

                // (b) hard code the known json string
                jsonString = "[{\"custom_fields\":[],\"data_type\":\"smallint\",\"description\":\"\",\"ds_id\":2,\"db_comment\":null,\"id\":593163,\"is_primary_key\":false,\"is_foreign_key\":false,\"name\":\"fldno\",\"nullable\":false,\"schema_id\":3,\"table_id\":45906,\"table_name\":\"rr1.rr1.macob\",\"title\":\"Length, position in list, etc.\",\"position\":5,\"url\":\"/attribute/593163/\"}]";
                asciiBytes = Encoding.ASCII.GetBytes(jsonString);
                //--- END TEST ------------------------------------------------

                JavaScriptSerializer sr = new JavaScriptSerializer();
                jsonResponse = sr.Deserialize<Datum[]>(jsonString);
...