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         }

使用契约方式必须在类及相关的属性添加相关的契约修饰符: [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

时间: 2024-10-07 21:39:15

C#中Json字符串的各种应用类的相关文章

根据Json字符串自动生成model类(java)

根据Json自动生成Model类 java 将json转换成java类 http://jsongen.byingtondesign.com you bring the json, we'll bring the code 发现一个很不错的网站,能够直接将json字符串生成java model类,超级方便. 很久之前就知道,一直没有用过,昨天在弄G+的数据的时候,用上了. 再结合Gson,你基本上不用做些什么了,很快就能转换成java对象了. 用法:找一个数据很全的json大数据,保存为.json

Java中Json字符串直接转换为对象(包括多层List集合)

http://blog.csdn.net/catoop/article/details/42744705 使用到的类:net.sf.json.JSONObject 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:commons-beanutils.jar,commons-httpclient.jar,commons-lang.jar,ezmorph.jar,morph-1.0.1.jar 下面是例子代码: [java] 

silverlight根据json字符串动态创建实体类

1.接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json);     //JsonValue引用自System.Json 2.创建两个类:一个为创建实体类方法,一个为调用实体类方法,实现操作并返回数据: //创建实体方法类 public class DynamicTypeBuilder { TypeBuilder tb; /// <summary> /// 构

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

http://blog.csdn.net/xuexiaodong009/article/details/46998069 json作为作为一种最常用的数据,应用很广泛,在.net中如何把一个对象转化为json字符串呢? 主要有一下几种 1按照json的定义自己转化,难度很大,但很灵活.需要自己处理各种特殊字符,各种数据类型 2使用开源的类库Newtonsoft.Json 3使用JavaScriptSerializer类 4使用System.Runtime.Serialization.dll提供的

Java中JSON字符串与java对象的互换实例详解(转)

http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式, JSON可以有两种格式,一种是对象格式的,另一种是数组对象, {"name":"JSON","address":"北京市西城区"

python接口自动化:响应内容中json字符串对象的处理

实现代码如下: import json #定义一个字典.一个列表.两个字符串({}中必须是双引号) di1={"name":"badbadboy","age":"24"} di2=[{"name":"badbadboy","age":"24"}] di3='{"name":"badbadboy","

js中json字符串转成js对象

json字符串转成js对象我所知的方法有2种: //json字符串转换成json对象 var str_json = "{name:'liuchuan'}"; //json字符串 //1. 函数对象构造定义 var obj1 = new Function("return " + str_json)(); console.log(obj1.name); //2. eval函数 var obj2 = eval("(" + str_json + &quo

JavaScript中JSON字符串和JSON对象相互转化

JSON字符串转化为JSON对象的2种方式 一.使用函数eval 1 var personsstr = '[{"Name":"zhangsan","Age":26},{"Name":"lisi","Age":26}]'; 2 var personsjson = eval(personsstr); 转化后结果: 二.使用JSON.parse 1 var personsstr = '[{&q

js 中json字符串转化json对象

JSON字符串:var str = '{ "name": "cxh", "sex": "man" }'; JSON对象:var str = { "name": "cxh", "sex": "man" }; 一.JSON字符串转换为JSON对象 //由JSON字符串转换为JSON对象 方法一:  var obj = eval('(' + str +