C# Newtonsoft.Json 应用
常用的一个简单方法
1 string jsonText = "{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}"; 2 JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText); 3 string zone = jo["zone"].ToString(); 4 string zone_en = jo["zone_en"].ToString();
通过JArray和JObject来创建一个音乐专辑结构的一个示例:
1 //Newtonsoft.Json.Linq.JObject jsonObject = new Newtonsoft.Json.Linq.JObject {{"Entered", DateTime.Now}}; 2 3 Newtonsoft.Json.Linq.JObject jsonObject = new Newtonsoft.Json.Linq.JObject(); 4 5 jsonObject.Add("Entered", DateTime.Now); 6 7 dynamic album = jsonObject; 8 9 album.AlbumName = "Dirty Deeds Done Dirt Cheap"; 10 album.Artist = "AC/DC/DVD"; 11 album.YearReleased = DateTime.Now.Year; 12 13 album.Songs = new Newtonsoft.Json.Linq.JArray() as dynamic; 14 15 dynamic song = new Newtonsoft.Json.Linq.JObject(); 16 song.SongName = "Dirty Deeds Done Dirt Cheap"; 17 song.SongLength = "4:05"; 18 album.Songs.Add(song); 19 20 song = new Newtonsoft.Json.Linq.JObject(); 21 song.SongName = "Love at First Feel"; 22 song.SongLength = "3:01"; 23 album.Songs.Add(song); 24 25 song = new Newtonsoft.Json.Linq.JObject(); 26 song.SongName = "小苹果"; 27 song.SongLength = "03:32"; 28 album.Songs.Add(song); 29 30 Console.WriteLine(album.ToString()); 31 32 Console.ReadLine();
以上代码最重要的是没有明确指定类型,便可将动态对象进行JSON序列化,而JObject对象只是接收数据,具体结构通过动态语言在运行时生成,这意味着此代码可以在运行时被编译,从而体现动态语言的优势。序列化的结果如下图所示:
1 //Newtonsoft.Json.Linq.JObject jsonObject = new Newtonsoft.Json.Linq.JObject {{"Entered", DateTime.Now}}; 2 Newtonsoft.Json.Linq.JObject jsonObject = new Newtonsoft.Json.Linq.JObject(); 3 jsonObject.Add("Entered", DateTime.Now); 4 dynamic album = jsonObject; 5 6 album.AlbumName = "非主流歌曲"; 7 8 foreach (var item in jsonObject) //循环输出动态的值 JObject(基类为JContainer、JObject和JArray)是一个集合,实现了IEnumerable接口,因此你还可以轻松地在运行时循环访问 9 { 10 Console.WriteLine(item.Key + "的值为:" + item.Value.ToString()); 11 }
JObject.Parse()和JArray.Parse()方法导入JSON格式,JToken结构支持Parse()和Load()方法,这两个方法可以分别从字符串或各种流读取JSON数据。JValue包括最核心的JSON 解析能力,支持将字符串转化为我们熟悉的动态对象。将JSON字符串转换为成JObject对象,并强制转换为动态类型。
1 var jsonString = @"{""Name"":""小苹果"",""Company"":""韩国公司"", ""Entered"":""2016-11-26 00:14""}"; 2 3 dynamic json = Newtonsoft.Json.Linq.JToken.Parse(jsonString) as dynamic; 4 5 string name = json.Name; 6 string company = json.Company; 7 DateTime entered = json.Entered; 8 Console.WriteLine("name:" + name); 9 Console.WriteLine("company:" + company); 10 Console.WriteLine("entered:" + entered); 11 12 Console.ReadLine();
将JObject和JArray实例映射到一个强类型的对象,所以你可以在同一段代码中混合书写动态和静态类型
1 string jsonString1 = @"[{""Name"":""小苹果"",""Age"":""20""},{""Name"":""演员"",""Age"":""2""}]"; 2 Newtonsoft.Json.Linq.JArray userAarray1 = Newtonsoft.Json.Linq.JArray.Parse(jsonString1) as Newtonsoft.Json.Linq.JArray; 3 List<User> userListModel = userAarray1.ToObject<List<User>>(); 4 foreach (var userModel1 in userListModel) 5 { 6 Console.WriteLine("Name:" + userModel1.Name); 7 Console.WriteLine("Age:" + userModel1.Age); 8 } 9 10 Console.WriteLine(""); 11 string jsonString = @"[{""Name"":""小苹果"",""Age"":""20""}]"; 12 Newtonsoft.Json.Linq.JArray userAarray = Newtonsoft.Json.Linq.JArray.Parse(jsonString) as Newtonsoft.Json.Linq.JArray; 13 Newtonsoft.Json.Linq.JObject jObject = userAarray[0] as Newtonsoft.Json.Linq.JObject; 14 User userModel = jObject.ToObject<User>(); 15 Console.WriteLine("Name:" + userModel.Name); 16 Console.WriteLine("Age:" + userModel.Age);
1 public class User 2 { 3 public string Name { set; get; } 4 public int Age { set; get; } 5 }
JSON.NET对动态语言的支持,但也别忘了它对静态类型的强大支持,关于如何序列化和反序列化强类型对象,JsonConvert是一个高级别的静态类,包装更低级别的功能,但你也可以使用JsonSerializer类,该类可以序列化和反序列化各种流
1 UserType album = new UserType() 2 { 3 Type = "普通用户", 4 UserListModel = new List<User>() 5 { 6 new User() 7 { 8 Name="张三", 9 Age = 20 10 }, 11 new User() 12 { 13 Name="李四", 14 Age = 30 15 } 16 } 17 }; 18 19 // serialize to string 20 string json2 = Newtonsoft.Json.JsonConvert.SerializeObject(album, Newtonsoft.Json.Formatting.Indented); 21 Console.WriteLine("序列化结果"); 22 Console.WriteLine(""); 23 Console.WriteLine(json2); 24 25 UserType userType = Newtonsoft.Json.JsonConvert.DeserializeObject<UserType>(json2); 26 Console.WriteLine(""); 27 Console.WriteLine("反序列化:"); 28 Console.WriteLine("Type:"+ userType.Type); 29 Console.WriteLine(""); 30 foreach (var userModel in userType.UserListModel) 31 { 32 Console.WriteLine("Name:"+userModel.Name); 33 Console.WriteLine("Age:" + userModel.Age); 34 }
1 public class UserType 2 { 3 public string Type { get; set; } 4 public List<User> UserListModel { get; set; } 5 } 6 7 public class User 8 { 9 public string Name { set; get; } 10 public int Age { set; get; } 11 }
转自 http://www.cnblogs.com/linJie1930906722/p/6103455.html
转载于:https://www.cnblogs.com/cwmizlp/p/9451103.html
C# Newtonsoft.Json 应用相关推荐
- Newtonsoft.Json文件错误
今天,在一个项目中使用signalR,由于项目框架是.net 4.0,所以用signalR1.0版本,signalR使用需要newtonsoft.Json文件,它把原 newtonsoft.Json ...
- Newtonsoft.Json.dll 本地调用正常,服务器调用不正常
Newtonsoft.Json.dll 本地调用正常,服务器调用不正常的问题 请将System.Runtime.Serialization.dll 传到服务器项目bin文件夹中即可 转载于:https ...
- Newtonsoft.Json code
序列化 Product product = new Product(); product.ExpiryDate = new DateTime(2008, 12, 28);JsonSerializer ...
- 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json
1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2: ...
- Newtonsoft.Json 概述
有时候,在前后台数据交互或者APP与后台交互的时候,我们通常会使用Json进行数据交互,为此会使用到Newtonsoft.Json.dll 这个类库,这个类库非微软官方,但是下载量已经超过了数十万次, ...
- Newtonsoft.Json高级用法
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- 使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)...
在开发中,我非常喜欢动态语言和匿名对象带来的方便,JSON.NET具有动态序列化和反序列化任意JSON内容的能力,不必将它映射到具体的强类型对象,它可以处理不确定的类型(集合.字典.动态对象和匿名对象 ...
- Newtonsoft.Json的简单使用
2019独角兽企业重金招聘Python工程师标准>>> 什么是Newtonsoft.Json Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库. Ne ...
- [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法
Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...
- Newtonsoft.Json(Json.net)的基本用法
Newtonsoft.Json(Json.net)的基本用法 添加引用: 使用NuGet,命令:install-package Newtonsoft.Json 实体类: public class Bo ...
最新文章
- 回顾2009,展望2010。
- MySQL-入门安装
- android升级SDK后,XML graphical layout无法预览的解决
- android 骨骼动画库,cocos creator spine骨骼动画组件使用
- python来构建多层网络
- 《互联网运营智慧》随书视频
- 如何修改远程桌面连接端口 ,历史记录,支持多用户
- FireFox的插件范例,竟然有问题
- 【人脸识别】基于matlab GUI PCA算法人脸识别门禁系统【含Matlab源码 1777期】
- docker 查看镜像版本_Docker 安装及入门介绍 - 荏苒经十载
- IstioCon 2022 报名中|使用 eBPF 代替 iptable 加速 Istio 数据平面
- 携程开源的分布式apollo技术,不吃透都对不起自己
- 编译安装httpd服务
- windows11专业工作站版
- 船长就是法律!古代海盗残酷刑罚
- obs-studio 二次封装 (四)obs 音视频采集到推流大体流程图
- 告别笨重卡慢的PyCharm,使用Nodepad++ python编程
- 糟了,上网记录被 Python 扒下来了!
- python代码手机壁纸_爬虫 抓取王者荣耀所有英雄皮肤高清壁纸+超强注
- Unity官方实例教程 Roll-a-Ball(二)
热门文章
- System.Configuration.ConfigurationSettings.GetConfig(string)”已过时 问题的解决方法
- Java学习lesson 02
- chown -R命令的使用
- [CareerCup] 13.10 Allocate a 2D Array 分配一个二维数组
- 中小企业应如何选择合适的数据保护工具?
- NO11 java5的线程锁技术(Lock Condition)
- log4net使用详解 .
- ERP技术的新方向——智能客户端
- 【用户行为即时分析查询】 数据仓库实现 案例分享
- Android自定义控件之仿美团下拉刷新