微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Newtonsoft.Json(Json.Net)学习笔记

Newtonsoft.Json,一款.NET中开源的Json序列化和反序列化类库(下载地址http://json.codeplex.com/)。

下面是Json序列化和反序列化的简单封装:

    /// <summary>
    /// Json帮助类
    </summary>
    public class JsonHelper
    {
        <summary>
         将对象序列化为JSON格式
        </summary>
        <param name="o">对象</param>
        <returns>json字符串</returns>
        static string SerializeObject(object o)
        {
            string json = JsonConvert.SerializeObject(o);
            return json;
        }

         解析JSON字符串生成对象实体
        <typeparam name="T">对象类型</typeparam>
        <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})对象实体static T DeserializeJsonToObject<T>(string json) where T : class
        {
            JsonSerializer serializer = new JsonSerializer();
            StringReader sr = new StringReader(json);
            object o = serializer.Deserialize(new JsonTextReader(sr),typeof(T));
            T t = o as T;
            return t;
        }

         解析JSON数组生成对象实体集合
        json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])对象实体集合static List<T> DeserializeJsonToList<T>(typeof(List<T>));
            List<T> list = o as List<T>;
            return list;
        }

         反序列化JSON到给定的匿名对象.
        匿名对象类型<param name="anonymousTypeObject">匿名对象static T DeserializeAnonymousType<T>(string json,T anonymousTypeObject)
        {
            T t = JsonConvert.DeserializeAnonymousType(json,anonymousTypeObject);
            return t;
        }
    }

为进一步理解Newtonsoft,写了一些测试的例子:

Json测试 class JsonTest : IRun { void Run() { Student sdudent = new Student(); sdudent.ID = 1; sdudent.Name = "陈晨"; sdudent.NickName = 石子儿"; sdudent.Class = new Class() { Name = CS0216",ID = 0216 }; //实体序列化和反序列化 string json1 = JsonHelper.SerializeObject(sdudent); json1 : {"ID":1,"Name":"陈晨","NickName":"石子儿","Class":{"ID":216,"Name":"CS0216"}} Student sdudent1 = JsonHelper.DeserializeJsonToObject<Student>(json1); 实体集合序列化和反序列化 List<Student> sdudentList = new List<Student>() { sdudent,sdudent1 }; string json2 = JsonHelper.SerializeObject(sdudentList); json: [{"ID":1,"Name":"CS0216"}},{"ID":1,"Name":"CS0216"}}] List<Student> sdudentList2 = JsonHelper.DeserializeJsonToList<Student>(json2); DataTable序列化和反序列化 DataTable dt = new DataTable(); dt.TableName = Student"; dt.Columns.Add(IDtypeof(int)); dt.Columns.Add(Name"); dt.Columns.Add(NickName"); DaTarow dr = dt.NewRow(); dr["] = 112; dr[战三"; dr[小三"; dt.Rows.Add(dr); string json3 = JsonHelper.SerializeObject(dt); json3 : [{"ID":112,"Name":"战三","NickName":"小三"}] DataTable sdudentDt3 = JsonHelper.DeserializeJsonToObject<DataTable>(json3); List<Student> sdudentList3 = JsonHelper.DeserializeJsonToList<Student>(json3); 验证对象和数组 Student sdudent4 = JsonHelper.DeserializeJsonToObject<Student>({\"ID\":\"112\",\"Name\":\"石子儿\"}"); List<Student> sdudentList4 = JsonHelper.DeserializeJsonToList<Student>([{\"ID\":\"112\",\"Name\":\"石子儿\"}]"); 匿名对象解析 var tempEntity = new { ID = 0,Name = string.Empty }; string json5 = JsonHelper.SerializeObject(tempEntity); json5 : {"ID":0,"Name":""} tempEntity = JsonHelper.DeserializeAnonymousType(",tempEntity); var tempStudent = new Student(); tempStudent = JsonHelper.DeserializeAnonymousType( 学生信息实体 class Student { int ID { get; set; } string Name { string NickName { public Class Class { set; } } 学生班级实体 class Class { set; } }
使用Json帮助类时,有两点需要注意下:

1. 通常使用调用实体序列化SerializeObject()和反序列化DeserializeJsonToObject()两个方法就可以了。但有些情况下我们解析json字符串时,可能没有对应的实体类型(或者说不想添加对应的实体类),这时候可以用匿名对象解析方法DeserializeAnonymousType(),方便快捷,对应代码如下:

            :" + tempEntity.Name);

2.Json的两种结构数组和对象解析时略有不同。Json对象一般转换成实体,Json数组一般转换成实体集合。代码如下:

            ");

简单解释下Json对象和数组的含义:

对象是以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间运用 “,”(逗号)分隔。名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:{"ID":"112","Name":"石子儿"}。

数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。例如:[{"ID":"112","Name":"石子儿"},{"ID":"113","Name":"陈晨"}]。


原文地址:http://www.cnblogs.com/freshman0216/p/4161800.html

原文地址:https://www.jb51.cc/json/289102.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐