У меня есть задание 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);