Я пытаюсь десериализовать 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.
вашей переменной routeValues объявлен вне вашего цикла Еогеаспа. Это означает, что вы каждый раз меняете значение одного объекта через цикл. Когда вы дойдете до конца, все значения будут установлены на последний элемент цикла. – jasonwarford