【发布时间】:2015-03-20 15:06:56
【问题描述】:
我正在尝试在 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 感到非常沮丧。
【问题讨论】:
-
您的变量 routeValues 在您的 foreach 循环之外声明。这意味着您每次通过循环都在更改一个对象的值。到最后,所有值都设置为循环中的最后一项。
标签: c# json wcf serialization