文档章节

解析Newtonsoft.Json的小例子

robortly
 robortly
发布于 2016/06/21 17:17
字数 386
阅读 42
收藏 1
HttpWebRequest request = (HttpWebRequest)result.AsyncState;
HttpWebResponse response = (HttpWebResponse)(request.EndGetResponse(result));
stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream, false);
string apiText = reader.ReadToEnd();
JObject jsonObj = null;
try
{
    jsonObj = JObject.Parse(apiText);
    if (jsonObj.Count == 1 || (int)(jsonObj["status"]) != 0) this.isError = true;
    else
    {
        string provinceName = (string)jsonObj["result"]["address_component"]["province"];
        string cityName = this.cityName_s = (string)jsonObj["result"]["address_component"]["city"];
        string districtName = (string)jsonObj["result"]["address_component"]["district"];
        string street = (string)jsonObj["result"]["address_component"]["street"];
/*下面是解析JArray的部分*/
        JArray jlist = JArray.Parse(jsonObj["result"]["pois"].ToString()); //将pois部分视为一个JObject,JArray解析这个JObject的字符串
        LocationItem locationitem = null;      //存储附近的某个地点的信息
        locations = new List<LocationItem>();  //附近位置的列表
        for(int i = 0; i < jlist.Count ; ++i)  //遍历JArray
        {
            locationitem = new LocationItem();
            JObject tempo = JObject.Parse(jlist[i].ToString());
            locationitem.id = tempo["id"].ToString();
            locationitem.title = tempo["title"].ToString();
            locationitem._distance = tempo["_distance"].ToString();
            locationitem.address = tempo["address"].ToString();
            locationitem.category = tempo["category"].ToString();
            locationitem.location.lat = tempo["location"]["lat"].ToString();
            locationitem.location.lng = tempo["location"]["lng"].ToString();
            locations.Add(locationitem);
        }
    }
}
catch (Exception)
{
    isError = true;
}

 

其中使用了两个类:

public class LngLat
    {
        public string lat { get; set; }
        public string lng { get; set; }
    }
    public class LocationItem
    {
        public string id{get;set;} //
        public string title { get; set; } //名称
        public string address { get; set; } //地址
        public string category { get; set; } //类型
        public LngLat location { get; set; } //经纬度
        public string _distance { get; set; } //距离(米)

        public LocationItem()
        {
            id = "0";
            title = "";
            address = "";
            _distance = "0";
            location = new LngLat { lng = "0", lat = "0" };
            category = "";
        }
    }

 

这样就完成了这个复杂json数据的解析。JSON数组访问还有用数组下标方式的,那个就需要数组至少要有足够的个数,如要取得上面那个json数据的 中国技术大厦A座 ,就是用jsonObj["result"]["pois"][1]["title"].ToString() ,即访问了result下pois数组的第2个节点的title信息,但是要遍历所有的数据就明显不如JArray方便了。    

© 著作权归作者所有

robortly

robortly

粉丝 11
博文 83
码字总数 55590
作品 0
深圳
技术主管
私信 提问
【转载】 C#使用Newtonsoft.Json组件来反序列化字符串为对象

在Asp.Net网站开发的过程中,很多时候会遇到对象的序列化和反序列化操作,Newtonsoft.Json组件是专门用来序列化和反序列化操作的一个功能组件,引入这个DLL组件后,就可使用JsonConvert.Des...

江湖逍遥
06/23
0
0
.net core 读取、修改配置文件appsettings.json

.net core 设置读取JSON配置文件 appsettings.json Startup.cs 中 类库中

Pursue`
05/13
0
0
【转载】C#使用Newtonsoft.Json组件来序列化对象

在Asp.Net网站开发的过程中,很多时候会遇到对象的序列化和反序列化操作,Newtonsoft.Json组件是专门用来序列化和反序列化操作的一个功能组件,引入这个DLL组件后,就可使用JsonConvert.Ser...

江湖逍遥
06/23
0
0
转载:Newtonsoft.Json 使用 C#序列号json,反序列化对象

使用方法比较简单 1.首先下载你需要的版本,然后在应用程序中引用Newtonsoft.Json.dll 文件. 2.引用命名空间 3.为了更好的理解,C#环境下我创建了一个Person类 4.利用Newtonsoft.Json序列号强类...

postdep
2013/03/11
6.6K
0
C# JSON格式的字符串读取到类中

将JSON格式的字符串读取到类中 本例中建立JSON格式的字符串json,将其内容读取到Person类中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: 运行结果: END...

北风其凉
2014/07/14
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

同名依赖,多次引入导致的程序错误

表现: 本地测试正常,打包上线后报错找不到某个方法(缺少依赖),检测依赖发现,同名依赖有两个版本。 解决:删除一个,程序正常

避难所
29分钟前
3
0
在HTML中的下拉框中实现超连接

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <link rel="canonical" href="https://blog.csdn.net/weixin_34228617/article/details/86130280"/> ......

mickelfeng
34分钟前
3
0
Content7关闭防火墙命令

在外部访问CentOS中部署应用时,需要关闭防火墙。 关闭防火墙命令:systemctl stop firewalld.service 开启防火墙:systemctl start firewalld.service 关闭开机自启动:systemctl disable f...

无名氏的程序员
35分钟前
3
0
分布式存储原理:TiDB

浮躁的码农
47分钟前
7
0
CSS实现圆角边框的完美解决方案

css实现图片圆角,兼容所有浏览器: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <style type= "text/css" > /*通用样式--容器宽度值*/ .s......

前端老手
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部