繁体   English   中英

如何从C#中的动态JSON字典中提取特定值

[英]How to pull a specific value from dynamic JSON dictionary in C#

我正在尝试从接收到地址解析请求的json中提取一条特定的数据。 这不是许多听起来相似的问题的重复,因为json是动态的,并且具有非常不规则的数组,这些数组在响应之间略有变化,因此我无法创建要解析的模型,也无法使用key来浏览模型名称。
这是一个响应的json:

{  
   "Response":{  
      "MetaInfo":{  
         "Timestamp":"2019-07-28T13:23:04.898+0000"
      },
      "View":[  
         {  
            "_type":"SearchResultsViewType",
            "ViewId":0,
            "Result":[  
               {  
                  "Relevance":1.0,
                  "MatchLevel":"houseNumber",
                  "MatchQuality":{  
                     "City":1.0,
                     "Street":[  
                        0.9
                     ],
                     "HouseNumber":1.0
                  },
                  "MatchType":"pointAddress",
                  "Location":{  
                     "LocationId":"NT_Opil2LPZVRLZjlWNLJQuWB_0ITN",
                     "LocationType":"point",
                     "DisplayPosition":{  
                        "Latitude":41.88432,
                        "Longitude":-87.63877
                     },
                     "NavigationPosition":[  
                        {  
                           "Latitude":41.88449,
                           "Longitude":-87.63877
                        }
                     ],
                     "MapView":{  
                        "TopLeft":{  
                           "Latitude":41.8854442,
                           "Longitude":-87.64028
                        },
                        "BottomRight":{  
                           "Latitude":41.8831958,
                           "Longitude":-87.63726
                        }
                     },
                     "Address":{  
                        "Label":"425 W Randolph St, Chicago, IL 60606, United States",
                        "Country":"USA",
                        "State":"IL",
                        "County":"Cook",
                        "City":"Chicago",
                        "District":"West Loop",
                        "Street":"W Randolph St",
                        "HouseNumber":"425",
                        "PostalCode":"60606",
                        "AdditionalData":[  
                           {  
                              "value":"United States",
                              "key":"CountryName"
                           },
                           {  
                              "value":"Illinois",
                              "key":"StateName"
                           },
                           {  
                              "value":"Cook",
                              "key":"CountyName"
                           },
                           {  
                              "value":"N",
                              "key":"PostalCodeType"
                           }
                        ]
                     }
                  }
               }
            ]
         }
      ]
   }
}

我正在尝试获取NavigationPosition中的两个坐标。

在开始创建用于从未解析的字符串中手动提取所需数据的方法的繁琐工作之前,有没有人有解决方案? 有没有办法使用foreach或if语句匿名遍历json数组?

如果响应是动态的,那么一种选择是使用动态反序列化

var dynamicObject = JsonConvert.DeserializeObject<dynamic>(jsonAsString);

您可以通过选中null来迭代此对象并编写防御性代码。 我假设“ NavigationPosition”将始终位于“位置”下,并依次位于“视图”列表下的“结果”列表下

像这样..(符号代码)

if(dynamicObject.View != null && dynamicObject.View[0] != null && dynamicObject.View[0].Result[0] != null && dynamicObject.View[0].Result[0].Location != null  )
{
    var navigationPosition = dynamicObject.View[0].Result[0].Location.NavigationPosition;
    // do something with it
}

看起来确实很麻烦,但是如果您无法控制json响应,我认为您应该能够在经过一些迭代之后就将其正确:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM