2016-06-20 3 views
0

Поиск по 'Newtonsoft.Json.JsonReaderException: Additional text encountered after finished reading JSON content: {. Path '', ...' находит не менее 3 SO вопросов, все из которых были прослежены до недопустимого Json.JObject.Parse throws error on valid Json

Я пробовал 3 разных валидаторы на:

[{"Imported": "This registration imported on: 06/20/2016"},{"ContactInfoUpdated": " Street Address2: Suite 222 to Shipping Address2: "}] 

и все три доклада он действительным. И все же ошибка времени выполнения подбрасывает то же 'Дополнительного текста встречается ...:

if (!string.IsNullOrWhiteSpace(UserComments)) 
{ 
    JToken addresses; 
    addresses = JObject.Parse(UserComments).GetValue("CarbonCopy"); //errors here 
    if (!ReferenceEquals(null, addresses)) 
    { 
     //stuff 
    } 
} 

Чтобы установить, что нет непреднамеренных символов после JSON закрывается, вот SQL:

UPDATE dbo.[Order] SET UserComments = '[{"Imported": "This registration imported on: 06/20/2016"},{"ContactInfoUpdated": " Street Address2: Suite 222 to Shipping Address2: "}]' WHERE idOrder =121050 
+2

Ваших JSON * * действителен, однако он представляет собой массив из двух объектов, а не одного объекта. Следовательно, 'JObject.Parse' не может использоваться для его анализа. Вместо этого попробуйте использовать 'JArray.Parse' или' JToken.Parse'. Вероятно, вам также придется внести другие изменения в свой код; кажется, что вы ожидаете одного объекта, содержащего значение «CarbonCopy», но у вас есть два объекта, и ни одно из них не обладает этим свойством. Из вашего вопроса не совсем ясно, что вы на самом деле пытаетесь сделать здесь. –

+0

Просто стараюсь избегать этой ошибки - оцените перенаправление. – justSteve

ответ

0

с благодарностью Брайана побуждая я нашел этот пост, чтобы быть очень полезным:

Get Value from JSON using JArray

Мои json несколько необычен в том, что это массив разнородных объектов. Вместо серии пары имени/значения, где Имя остается постоянным, поле моего UserComments 'содержит пары, где Имени может быть «ProfileWasEdited», «CCRequested», «Обратной связи», и так далее ,

Для того, чтобы разместить этот тип структуры, мне нужно, чтобы проверить против Названия собственности:

var fields = JToken.Parse(UserComments); 
var isCC = ""; 
foreach (JObject content in fields.Children<JObject>()) 
{ 
    foreach (JProperty prop in content.Properties()) 
    { 
     if (prop.Name == "CarbonCopy") 
     isCC = prop.Value.ToString(); 
    } 
} 

Resharper сообщает мне, что я могу Linq-Изя выше, чтобы:

foreach (JProperty prop in fields.Children<JObject>().SelectMany(content => content.Properties().Where(prop => prop.Name == "CarbonCopy"))) 
{ 
    isCC = prop.Value.ToString(); 
}