2015-03-20 3 views
0

Я пытаюсь десериализовать JSON в C# в веб-сервисе WCF и переупаковать его как список. Я использую JObject.Parse в Json.NET. Ниже приведен код, который я использую для вызова веб-службы, получить JSON и поместить его в список.Попытка десериализации Json в C#

String url = URL to a web service; 
HttpWebRequest WebReqOpenPermits = (HttpWebRequest)WebRequest.Create(url); 
WebReqOpenPermits.ContentType = "application/json; charset=utf-8"; 
WebReqOpenPermits.Method = "GET"; 
HttpWebResponse WebRespOpenPermits = (HttpWebResponse)WebReqOpenPermits.GetResponse(); 

Stream jsonStream = WebRespOpenPermits.GetResponseStream(); 
List<routeOpenPermits> permitsList = new List<routeOpenPermits>(); 
using (StreamReader reader = new StreamReader(jsonStream)) 
{ 
    string line; 
    routeOpenPermits routeValues = new routeOpenPermits(); 
    while ((line = reader.ReadLine()) != null) 
    { 
     JObject results = JObject.Parse(line); 
     foreach (var result in results["GetOpenPermitsByIdResult"]) 
       { 
        routeValues.oAddress = (string)result["oAddress"]; 
        routeValues.oDateIssued = (string)result["oDateIssued"]; 
        routeValues.oPermit = (string)result["oPermit"]; 
        permitsList.Add(routeValues); 
       } 
      } 
     } 

Этот код добавляет правильное количество записей в списке, но только данные последней записи в строке JSON добавляется в список. Например, если данные JSON содержат 5 записей, все они добавляются в список, но данные в списке поступают только из пятой и последней записи в строке JSON. Данные из пятой записи повторяются пять раз в списке.

Что я делаю неправильно? Есть ли лучший способ, потому что я открыт для поиска нового метода. Я искал довольно долгое время, но не смог найти решение. Благодарим вас за любую помощь, примеры, рекомендации или советы, которые могут быть отправлены по-моему. Я полностью разочарован десериализацией JSON.

+0

вашей переменной routeValues ​​объявлен вне вашего цикла Еогеаспа. Это означает, что вы каждый раз меняете значение одного объекта через цикл. Когда вы дойдете до конца, все значения будут установлены на последний элемент цикла. – jasonwarford

ответ

1

Вы должны переместить линию:

routeOpenPermits routeValues = new routeOpenPermits();

внутрь вашего foreach петли

+0

Да, спасибо, что сделал это. Я исправил его вскоре после публикации, но только что вернулся в систему, чтобы ответить на мой собственный вопрос. Это была «глупая человеческая ошибка». Я так долго смотрел на код и сосредоточился на аспекте Json, что я не видел свою ошибку. Я смотрел на другой код в другом проекте и сразу заметил, что я сделал не так. – Steve

Смежные вопросы