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实现
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; } [DataMember] public string Name { get; set; } [DataMember] public string Sex { get; set; } [DataMember] public int Age { get; set; } [DataMember] public string Address { get; set; } [DataMember] 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("许展鹏", "男", , "陕西", new PersonCharacter()); Person p = new Person() { Name = "四大圣地", Age = , Sex = "男", Character = new PersonCharacter() { Daode="sds", Wenhua="dasd", Xiuyang="zzz"} }; DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType()); string jsonText; try { using (MemoryStream stream = new MemoryStream()) { serializer.WriteObject(stream, p); jsonText = Encoding.UTF.GetString(stream.ToArray()); Console.WriteLine(jsonText); } using (MemoryStream ms = new MemoryStream(Encoding.UTF.GetBytes(jsonText))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person)); Person p = (Person)serializer.ReadObject(ms); } } catch (Exception ex ) { throw new Exception(ex.Message,ex); } }
使用契约方式必须在类及相关的属性添加相关的契约修饰符: [DataContract], [DataMember] 内嵌的对象内部可以不用添加契约修饰符号的。
以上只是最常用的应用方式,对于有特殊需求的实现可以使用第三方实现的json转换类进行处理。在web页面可以使用 引入System.Web.Script.Serialization命名空间使用 JavaScriptSerializer类实现简单的序列化。
相关文章
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25