Вот выполнимое решение, которое я использовал, основываясь на ответе Сэма Я :
dynamic obj = JsonConvert.DeserializeObject(json);
foreach (var response in (IEnumerable)obj.responses)
{
response.body = JsonConvert.DeserializeObject((string)response.body);
}
string result = JsonConvert.SerializeObject(obj);
Тот факт, что вы получаете ConcurrentModificationException
при использовании расширенного цикла for, означает, что другой поток изменяет ваш список, пока вы перебираете его.
Вы получаете другую ошибку при циклировании с нормальным для цикл по той же причине - список изменяется по размеру, но вы проверяете только ограничение size()
в записи в цикле.
Существует множество способов решения этой проблемы, но можно было бы обеспечить все доступ к списку синхронизирован .
Используете ли вы несколько потоков? Принятый ответ в этом вопросе может помочь вам в отношении параметра IndexOutOfBoundsException.
Вызов ConcurrentModificationException возникает, когда вы пытаетесь изменить (изменить, удалить, изменить или изменить каким-либо образом) список, пока итерации по нему. Например:
//This code would throw a ConcurrentModificationException
for(Duck d : liveDucks){
if(d.isDead()){
liveDucks.remove(d);
}
}
//This could be a possible solution
for(Duck d : liveDucks){
if(d.isDead()){
deadDucks.add(d);
}
}
for(Duck d : deadDucks){
liveDucks.remove(d); //Note that you are iterating over deadDucks but modifying liveDucks
}