在程序中任何事物及信息都可以用对象进行描述和承载,除了比较流行的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字符串的各种应用类相关推荐

  1. java字符串转json取集合_Java中Json字符串直接转换为对象的方法(包括多层List集合)...

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...

  2. java list 对象 json字符串_Java中Json字符串直接转换为对象的方法(包括多层List集合)...

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...

  3. 多层json字符串转map_Java中Json字符串直接转换为对象的方法(包括多层List集合)

    使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-b ...

  4. 【小5聊】C# Json字符串转Model实体类以及Model实体类转Json字符串

    1.引用DLL:Newtonsoft.Json.dll 引用自己项目兼容的dll版本安装 2.Json字符串转Model实体类 UserInfoModel model = new UserInfoMo ...

  5. java 中操作字符串都有哪些类?它们之间有什么区别?

    java 中操作字符串都有哪些类?它们之间有什么区别? String.StringBuffer.StringBuilder String : final修饰,String类的方法都是返回new Str ...

  6. Java中怎样将Json字符串转换成实体类

    场景 在Java中调用接口获取Json数据后,怎样转换成对应的实体类进行接受与存储. 实现 打开浏览器输入在线Json格式化,这里推荐使用: http://www.bejson.com/ 选择Json ...

  7. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  8. C# .net中json字符串和对象之间的转化方法

    json作为作为一种最常用的数据,应用很广泛,在.net中如何把一个对象转化为json字符串呢? 主要有一下几种 1按照json的定义自己转化,难度很大,但很灵活.需要自己处理各种特殊字符,各种数据类 ...

  9. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

最新文章

  1. ClickHouse 学习
  2. “抽象类”的定义及其与“普通类”的区别
  3. ZABBIX利用自带模板监控mysql数据库
  4. 第十五周程序阅读-范型程序设计(1)
  5. WPF#39;s Style BasedOn
  6. PIC单片机入门_指令系统
  7. mariadb mysql同步_CentOS7安装配置MariaDB(mysql)数据主从同步
  8. 元器件大一点好,还是小一点好?
  9. ENSP综合配置 实例十二 实战
  10. ubuntu18.04中tomcat8.5启动时报找不到JAVA_HOME和JRE_HOME
  11. react 引入轮播插件_React.js实现轮播图
  12. 嵌入式Linux系统编程学习之二十二内存映射
  13. 电脑功耗测试软件_电脑“烤机”怎么测?用这几款软件就对了
  14. svn 创建 分支 branches
  15. ural 1024. Permutations
  16. 图示 Smart-Art
  17. 机器学习数学基础知识
  18. nth-child和nth-of-type的区别
  19. C语言—整除问题、求余、赋值、逻辑运算符易错点
  20. 如何知道计算机显示器尺寸,我怎么知道我的计算机显示器有多少英寸?查看方法...

热门文章

  1. Using string literals in ref attributes is deprecated
  2. 用Python玩转微信的正确姿势!
  3. PLSQL DEVELOPER 使用技巧
  4. Redis设计与实现 第一部分
  5. 恩布开源安卓手机IM,EntboostIM发布1.5.2版本
  6. Xcode制作动态及静态Framework
  7. Socket 同步/异步 与阻塞/非阻塞区别
  8. Sound Mixer Fader
  9. 组播穿越MPLS ×××+SSM
  10. swith语句的较安全用法