2016-09-15 12 views
-2

Вот код, который я получаю в последней строке, где я десериализую json для объектов C#. как это исправить.«Недопустимый массив передан, дополнительный трейлинг», «получение этой ошибки при десериализации Json в C#. Как исправить это

WebRequest req = WebRequest.Create(@"https://aaaaa.service-now.com/api/now/table/incident?sysparm_query=sys_updated_onBETWEENjavascript:gs.dateGenerate('2015-01-01','00:00:00')@javascript:gs.dateGenerate('2016-06-30','23:59:59')"); 
    req.Method = "GET"; 
    req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("username:password")); 
    req.ContentType = "application/xml"; 



    HttpWebResponse resp = req.GetResponse() as HttpWebResponse; 
    var responseValue = string.Empty; 
    using (var responseStream = resp.GetResponseStream()) 
    { 




     if (responseStream != null) 
      using (var reader = new StreamReader(responseStream)) 
       responseValue = reader.ReadToEnd(); 



    } 


    JavaScriptSerializer ser = new JavaScriptSerializer(); 
    ser.MaxJsonLength = 2147483647; 
    ser.RegisterConverters(new List<JavaScriptConverter> { new ResultConverter() }); 
    **RootObject ro = ser.Deserialize<RootObject>(responseValue); 
+4

проверить JSON и исправить его – scrappedcola

+0

Это дает вам сообщение об ошибке JSON, которую вы пытаетесь десериализовать. JSON имеет дополнительную запятую в массиве. Я знаю это, потому что ты сказал мне. И вы хотите, чтобы кто-то исправил это для вас ... как? Вызов конструктора сериализатора по-разному? Не могли бы вы, по крайней мере, по крайней мере, поделиться текстом самого JSON? –

+0

ОК спасибо, ошибка ясна, я знаю это, но я получаю 50 000 записей, и я не знаю, как найти эту конкретную запись, и каждый массив json имеет 80 полей. Я просто ищу, как избавиться от этого "," в коде json response thorugh. –

ответ

0

Очевидно ваш JSON нарушается, поскольку он имеет запятую в массиве. Если это JSON приходит откуда-то вы не контролируете, вы должны сказать им, чтобы исправить их сломанные реализации, или вы должны использовать более толерантный десериализатор JSON (к сожалению, мне нечего рекомендовать).

Однако в то же время вы можете обойти проблема, если мы сделаем некоторые предположения. Самое большое предположение заключается в том, что у вас нет каких-либо цитируемых полей, которые содержат «,]» или «,». Если верно это предположение, то вы можете использовать простое регулярное выражение, чтобы найти места, где Есть запятые в конце массивов или объектов и удалить их:

//using System.Text.RegularExpressions 
var rx = new Regex(@",(\s*[\]}])", RegexOptions.Multiline); 
responseValue = rx.Replace(responseValue, "$1"); 

Если это ваш собственный JSON, который вы можете редактировать самостоятельно, затем просто откройте «Notepad ++» или какой-либо другой текстовый редактор, способный выполнять поиск с помощью регулярного выражения и искать «,\s*[\]}]» (с включением или совпадением новой строки), чтобы найти вашу запятую.

+0

Спасибо, Кевин, да, JSON исходит откуда-то, где я не могу контролировать, я обязательно попытаюсь использовать Regex и посмотреть, как это происходит. Но мой JSON выглядит, как это "результат" { : [ { "родитель": "", "made_sla": "правда", "caused_by": "", "watch_list": "", " upon_reject ": "отменить", "sys_updated_on": "2016-06-27 14:47:52", "approval_history": "", "номер": "INC0017004", "resolved_by": "" } ] } –