试图在c#中反序列化Json

时间:2015-03-20 15:06:56

标签: c# json wcf serialization

我试图在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感到非常沮丧。

1 个答案:

答案 0 :(得分:1)

你应该移动一行:

routeOpenPermits routeValues = new routeOpenPermits();

进入foreach循环

的内部