【问题标题】:Trying to deserialize Json in c#试图在 C# 中反序列化 Json
【发布时间】: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


【解决方案1】:

你应该移动这条线:

routeOpenPermits routeValues = new routeOpenPermits();

进入您的 foreach 循环内部

【讨论】:

  • 是的,谢谢。我在发布后不久就修复了它,但现在才重新登录以回答我自己的问题。这是一个“愚蠢的人为错误”。我一直盯着代码很长时间,专注于 Json 方面,我没有看到我的错误。我正在查看另一个项目中的其他代码,并立即发现我做错了什么。
猜你喜欢
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多