C#中Json字符串的各种应用类
在程序中任何事物及信息都可以用对象进行描述和承载,除了比较流行的xml之外,还有一种简洁快速处理目标信息的形式那就是Json格式。
首先Json格式有自己固定的格式:例如person这个对象就可以简单的表示成{"name":"xxxx","age":12,"sex":"男"}形式。
Json格式的描述如下:先用{}包含需要表达的对象信息,在{}里使用PropertyName:Value进行对象属性的描述,同时Json字符串可以实现多层嵌套。例如:Json数据:[{PropertyName:Value,PropertyName:Value},{PropertyName:Value,PropertyName:Value}],Json嵌套格式:{PropertyName:Value,PropertyName:{PropertyName:Value,PropertyName:Value}},理论上可以无限嵌套,但是这里建议嵌套最好不要超过3层。
对Json格式有了了解之后,那我们如何在C#中使用Json以及将已经实现的对象与Json联系起来。先个给出几个命名空间
using Newtonsoft.Json;
using System.Runtime.Serialization;
using System.ServiceModel;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Runtime.Serialization.Json;
这里需要注意的是 这些命名空间在 .net3.5及以上本版支持,同时必须在引用中添加 System.Runtime.Serialization.dll的引用。
这里主要使用到的类如下:
JsonSerializer
,StringWriter,StringReader ,JsonWriter,JsonConvert, DataContractJsonSerializer。
1.实现自定义类与Json进行相互转化处理:
public class Person{public Person(){}public Person(string Name, string Sex, int Age, string Address, PersonCharacter Character){this.Name = Name;this.Sex = Sex;this.Age = Age;this.Address = Address;this.Character = Character;}public string Name { get; set; }public string Sex { get; set; }public int Age { get; set; }public string Address { get; set; }public PersonCharacter Character { get; set; }}public class PersonCharacter{public string Daode { get; set; }public string Wenhua { get; set; }public string Xiuyang { get; set; }}public void ShowConvert(){Person person = new Person("lanar", "男", 24, "陕西", new PersonCharacter());JsonSerializer serializer = new JsonSerializer();StringWriter sw = new StringWriter();serializer.Serialize(new JsonTextWriter(sw), person );Console.WriteLine(sw.GetStringBuilder().ToString());StringReader sr = new StringReader(@"{""Name"":""ppp"", ""Age"":"12"}");Person p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Person));Console.WriteLine(p1.Name+ "=>" + p1.Age);}
2. 契约方式:使用System.Runtime.Serialization.dll提供的DataContractJsonSerializer或者 JsonReaderWriterFactory实现
1 [DataContract] 2 public class Person 3 { 4 public Person() 5 { 6 } 7 public Person(string Name, string Sex, int Age, string Address, PersonCharacter Character) 8 { 9 this.Name = Name; 10 this.Sex = Sex; 11 this.Age = Age; 12 this.Address = Address; 13 this.Character = Character; 14 } 15 [DataMember] 16 public string Name { get; set; } 17 18 [DataMember] 19 public string Sex { get; set; } 20 21 [DataMember] 22 public int Age { get; set; } 23 24 [DataMember] 25 public string Address { get; set; } 26 27 [DataMember] 28 public PersonCharacter Character { get; set; } 29 30 } 31 32 public class PersonCharacter 33 { 34 35 36 public string Daode { get; set; } 37 38 39 public string Wenhua { get; set; } 40 41 42 public string Xiuyang { get; set; } 43 } 44 45 46 public void ShowConvert() 47 { 48 Person person = new Person("许展鹏", "男", 24, "陕西", new PersonCharacter()); 49 50 Person p = new Person() { Name = "四大圣地", Age = 22, Sex = "男", Character = new PersonCharacter() { Daode="sds", Wenhua="dasd", Xiuyang="zzz"} }; 51 DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType()); 52 string jsonText; 53 54 try 55 { 56 using (MemoryStream stream = new MemoryStream()) 57 { 58 serializer.WriteObject(stream, p); 59 jsonText = Encoding.UTF8.GetString(stream.ToArray()); 60 Console.WriteLine(jsonText); 61 } 62 63 using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText))) 64 { 65 DataContractJsonSerializer serializer1 = new DataContractJsonSerializer(typeof(Person)); 66 Person p1 = (Person)serializer1.ReadObject(ms); 67 68 } 69 } 70 catch (Exception ex ) 71 { 72 73 throw new Exception(ex.Message,ex); 74 } 75 }
View Code
使用契约方式必须在类及相关的属性添加相关的契约修饰符: [DataContract], [DataMember] 内嵌的对象内部可以不用添加契约修饰符号的。
以上只是最常用的应用方式,对于有特殊需求的实现可以使用第三方实现的json转换类进行处理。在web页面可以使用 引入System.Web.Script.Serialization命名空间使用 JavaScriptSerializer类实现简单的序列化。
JSON官网:http://www.json.org/json-zh.html
独立JSON序列化:http://msdn.microsoft.com/zh-cn/library/bb412170.aspx
如何对JSON序列化和反序列化:http://msdn.microsoft.com/zh-cn/library/bb412179.aspx
转载于:https://www.cnblogs.com/xplangren/p/4882501.html
C#中Json字符串的各种应用类相关推荐
- java字符串转json取集合_Java中Json字符串直接转换为对象的方法(包括多层List集合)...
使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...
- java list 对象 json字符串_Java中Json字符串直接转换为对象的方法(包括多层List集合)...
使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...
- 多层json字符串转map_Java中Json字符串直接转换为对象的方法(包括多层List集合)
使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...
- 【小5聊】C# Json字符串转Model实体类以及Model实体类转Json字符串
1.引用DLL:Newtonsoft.Json.dll 引用自己项目兼容的dll版本安装 2.Json字符串转Model实体类 UserInfoModel model = new UserInfoMo ...
- java 中操作字符串都有哪些类?它们之间有什么区别?
java 中操作字符串都有哪些类?它们之间有什么区别? String.StringBuffer.StringBuilder String : final修饰,String类的方法都是返回new Str ...
- Java中怎样将Json字符串转换成实体类
场景 在Java中调用接口获取Json数据后,怎样转换成对应的实体类进行接受与存储. 实现 打开浏览器输入在线Json格式化,这里推荐使用: http://www.bejson.com/ 选择Json ...
- java中将json字符串_Java中JSON字符串与java对象的互换实例详解
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- C# .net中json字符串和对象之间的转化方法
json作为作为一种最常用的数据,应用很广泛,在.net中如何把一个对象转化为json字符串呢? 主要有一下几种 1按照json的定义自己转化,难度很大,但很灵活.需要自己处理各种特殊字符,各种数据类 ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
最新文章
- ClickHouse 学习
- “抽象类”的定义及其与“普通类”的区别
- ZABBIX利用自带模板监控mysql数据库
- 第十五周程序阅读-范型程序设计(1)
- WPF#39;s Style BasedOn
- PIC单片机入门_指令系统
- mariadb mysql同步_CentOS7安装配置MariaDB(mysql)数据主从同步
- 元器件大一点好,还是小一点好?
- ENSP综合配置 实例十二 实战
- ubuntu18.04中tomcat8.5启动时报找不到JAVA_HOME和JRE_HOME
- react 引入轮播插件_React.js实现轮播图
- 嵌入式Linux系统编程学习之二十二内存映射
- 电脑功耗测试软件_电脑“烤机”怎么测?用这几款软件就对了
- svn 创建 分支 branches
- ural 1024. Permutations
- 图示 Smart-Art
- 机器学习数学基础知识
- nth-child和nth-of-type的区别
- C语言—整除问题、求余、赋值、逻辑运算符易错点
- 如何知道计算机显示器尺寸,我怎么知道我的计算机显示器有多少英寸?查看方法...