我试图在WCF Web服务中反序列化C#中的JSON并将其重新打包为列表。我在Json.NET中使用JObject.Parse。下面是我用来调用Web服务的代码,获取JSON并将其放入列表中。
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 :(得分:1)
你应该移动一行:
routeOpenPermits routeValues = new routeOpenPermits();
进入foreach
循环