造轮子_Json序列化之.NET开源类库Newtonsoft.Json

厂址:http://www.cnblogs.com/yunfeifei/p/4086014.html

上代码:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace JsonWithNewtonsoft
{
    class Program
    {
        static void Main(string[] args)
        {
            //使用StringReader读取Json
            string jsonText = @"{""Name"":""Jack"",""Age"":""22""}";
            JsonReader reader = new JsonTextReader(new StringReader(jsonText));
            while (reader.Read())
            {
                Console.WriteLine(reader.TokenType + "\t" + reader.ValueType + "\t" + reader.Value);
            }
            Console.WriteLine();
            //使用JObject读取Json
            JObject jo = JObject.Parse(jsonText);
            string[] values = jo.Properties().Select(item => item.Name.ToString() + ":" + item.Value.ToString()).ToArray();
            foreach (string s in values)
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();

            //解析数组型数据
            string jsonArrayText1 = "[{‘Name‘:‘Tom‘,‘Age‘:‘16‘},{‘Name‘:‘Mary‘,‘Age‘:‘15‘}]";
            JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1);
            string name1 = ja[1]["Name"].ToString();
            Console.WriteLine("数组型数据取法一:" + name1);
            Console.WriteLine();
            JObject o = (JObject)ja[1];
            string name2 = o["Name"].ToString();
            Console.WriteLine("数组型数据取法二:" + name2);
            Console.WriteLine();

            //嵌套格式
            string jsonTexta = "{\"shanghai\":{\"zone\":\"浦东\",\"zone_en\":\"pudong\"}}";
            JObject jsonObjt = JObject.Parse(jsonTexta);
            string zone = ((JObject)jsonObjt["shanghai"])["zone"].ToString();
            string zoneEn = ((JObject)jsonObjt["shanghai"])["zone_en"].ToString();
            Console.WriteLine(zone + "," + zoneEn);

            string jsonData = "{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":\"guangzhou\",\"province\":\"guangdong\"}}";
            JObject jsonObj = JObject.Parse(jsonData);
            string namea = jsonObj["name"].ToString();
            string age = jsonObj["age"].ToString();
            string city = ((JObject)jsonObj["addr"])["city"].ToString();
            string province = ((JObject)jsonObj["addr"])["province"].ToString();
            Console.WriteLine(namea + "," + age + "," + city + "," + province);
            Console.WriteLine(GetJsonValue(jsonObj.Children(), "province"));
            Console.WriteLine();

            string jsonDatab = "{\"addr\":[{\"city\":\"guangzhou\",\"province\":\"guangdong\"},{\"city\":\"guiyang\",\"province\":\"guizhou\"}]}";
            JObject jsonObjm = JObject.Parse(jsonDatab);
            JArray jar = JArray.Parse(jsonObjm["addr"].ToString());
            JObject j = JObject.Parse(jar[0].ToString());
            Console.WriteLine(j["city"]);

            //序列化Json
            StringWriter sw = new StringWriter();
            JsonWriter writer = new JsonTextWriter(sw);
            writer.WriteStartObject();
            writer.WritePropertyName("Name");
            writer.WriteValue("Jack");
            writer.WritePropertyName("Age");
            writer.WriteValue("26");
            writer.WriteEndObject();
            writer.Flush();
            string jsonTextb = sw.GetStringBuilder().ToString();
            Console.WriteLine(jsonTextb);
            Console.WriteLine();

            //序列化Student类
            Student stu = new Student() { Name="Jack",Age=20};
            JsonSerializer serializer=new JsonSerializer();
            StringWriter strw=new StringWriter();
            serializer.Serialize(new JsonTextWriter(strw),stu );
            Console.WriteLine(strw.GetStringBuilder().ToString());

            //反序列化Student类
            StringReader sr=new StringReader(strw.GetStringBuilder().ToString());
            Student st = (Student) serializer.Deserialize(new JsonTextReader(sr), typeof (Student));
            Console.WriteLine(st.Name + "=>" + st.Age);
            Console.WriteLine();

            //序列化集合列表
            List<Student> students=new List<Student>();
            Student stu1=new Student(){Name="Jack",Age=20};
            Student stu2=new Student(){Name="Tom",Age=21};
            students.Add(stu1);
            students.Add(stu2);
            JsonSerializer serializer1=new JsonSerializer();
            StringWriter strw1=new StringWriter();
            serializer.Serialize(new JsonTextWriter(strw1),students);
            Console.WriteLine(strw1.GetStringBuilder().ToString());
            Console.WriteLine();

            List<Student2> student2s=new List<Student2>();
            Student2 stu3=new Student2(){Name="Jack",Age=20,Phones = new List<string>{"18627900216","18571643691"}};
            Student2 stu4 = new Student2() { Name = "Tom", Age = 21, Phones = new List<string> { "15972944805", "13349855388" } };
            student2s.Add(stu3);
            student2s.Add(stu4);
            JsonSerializer serializer2=new JsonSerializer();
            StringWriter strw2=new StringWriter();
            serializer2.Serialize(new JsonTextWriter(strw2),student2s);
            Console.WriteLine(strw2.GetStringBuilder().ToString());

            Console.Read();
        }

        /// <summary>
        /// 遍历动态json对象
        /// </summary>
        /// <param name="jToken">json对象的集合</param>
        /// <param name="key">json对象的属性</param>
        /// <returns>json对象的值</returns>
        public static string GetJsonValue(JEnumerable<JToken> jToken, string key)
        {
            IEnumerator enumerator = jToken.GetEnumerator();
            while (enumerator.MoveNext())
            {
                JToken jc = (JToken) enumerator.Current;

                if (jc is JObject || ((JProperty) jc).Value is JObject)
                {
                    return GetJsonValue(jc.Children(), key);
                }
                else
                {
                    if (((JProperty) jc).Name == key)
                    {
                        return ((JProperty) jc).Value.ToString();
                    }
                }
            }
            return null;
        }

        /// <summary>
        /// Student类,序列化时用
        /// </summary>
        public class Student
        {
            /// <summary>
            /// 姓名
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 年龄
            /// </summary>
            public int Age { get; set; }
        }
        /// <summary>
        /// 修改Studnet类,添加电话号码字段
        /// </summary>
        public class Student2
        {
            /// <summary>
            /// 姓名
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 年龄
            /// </summary>
            public int Age { get; set; }
            //电话集合
            public List<string> Phones { get; set; }
        }
    }
}

上效果:

上附件:

点击下载

时间: 2024-10-04 07:55:11

造轮子_Json序列化之.NET开源类库Newtonsoft.Json的相关文章

Json序列化之.NET开源类库Newtonsoft.Json的研究

一.Json简介                                                                                                                    JSON(全称为JavaScript Object Notation) 是一种轻量级的数据交换格式.它是基于JavaScript语法标准的一个子集. JSON采用完全独立于语言的文本格式,可以很容易在各种网络.平台和程序之间传输.JSON的语法很简单,

EntityFramework中Json序列化的循环引用问题解决--Newtonsoft.Json

1.在使用EF时,由于数据库主外键关联,将对象进行Json序列化时会遇到循环引用的问题 //EF 中由于数据库主外键关联,对象的序列化经常出现循环引用问题 //使用.Net 自带的序列化工具,序列化出现循环引用问题 List<student> list = _Context.students.ToList(); JavaScriptSerializer ser = new JavaScriptSerializer(); string str = ser.Serialize(list); Con

[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) JSON序列化利器 Newtonsoft.Json 及 通用Json类

[.net 面向对象程序设计进阶] (13) 序列化(Serialization)(五) JSON序列化利器 Newtonsoft.Json 及 通用Json类 本节导读: 关于JSON序列化,不能不了解Json.net(Newtonsoft.Json)这款世界级的开源类库,除了拥有良好的性能之外,功能也是非常强大的. 本节会详细说明这个类库.此外,对于不喜欢使用第三方类库的同学,会整理一个基于微软类库的通用Json类. 读前必备: 本节主要介绍一款第三方类库和一个自己整理封装的类库,说起到封装

GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式. 对于Android 4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有ActionBar功能的版本,基于Ice Cream Sandwich的自定义动作栏实现将自动围绕布局.能够让开发者轻松开发

Swifter.Json 可能是 .Net 平台迄今为止性能最佳的 Json 序列化库【开源】

Json 简介 Json (JavaScript Object Notation) 是一种轻量级的数据交换格式.它作为目前最欢迎的数据交换格式,也是各大开源贡献者的必争之地,如:阿里爸爸的 fastjson(java),腾讯的 rapidjson(c++) 等.但 .Net 却没有得到大厂的青睐,在 Swifter.Json 之前 .Net 的 Json 解析库都不完美. Swifter.Json 简介 Swifter.Json 是 .Net 平台上一个功能强大,简单易用,稳定及高性能的 Jso

iCarousel——在iOS和Mac OS应用中实现3D CoverFlow旋转木马效果的开源类库

前言 iCarousel一个简单.可高度定制的3D CoverFlow开源类库,旨在简化在 iPhone, iPad和Mac OS中生成各种类型的cover flow(视图切换)效果(分页.滚动视图).用户手指划动图片,图片将不断以3D的形式切换. Github托管地址:https://github.com/nicklockwood/iCarousel 说明 iOS开发中如果想要你实现滑动效果,可以使用icarousel这个第三方库,还比较好用,感觉用起来有点像tableView.在网上下载这个

我们为什么喜欢重新造轮子

不要重新造轮子,是英文don't re invite wheel的直译.什么是轮子呢,我们一般认为一个通用中间件或框架,和实际业务没有直接关系的代码,就是轮子.这些代码虽然不是实质的业务逻辑,但是在一个项目中往往是担当骨架的作用. 程序员新手的眼中,这些代码就是经验的象征.在很多项目组中,只有经验丰富的老程序员才有机会去设计和选择这些轮子.可以设计可重用的干货代码,也就成为很多对技术有追求的程序员的努力方向.有几年工作经验,在技术上寻求发展的程序员大多都会自己设计和实现一些经典的轮子,这也成为了

Hybrid App Development: 二、关于造轮子以及在Xcode iOS应用开发中加入Cordova

转载请注明出处:http://www.cnblogs.com/xdxer/p/4111552.html [ctrl+左键点击图片可以查看原图] 在上一篇关于Hybrid App Development的文章中,我讨论了一下在iOS下UIWebView的使用方法.但是光使用一个UIWebView所提供的功能还是完全不能满足我们的需求.   关于造轮子的思考: 在UIKit中的UIWebView虽然已经提供了很多功能了,比如JavaScript和Objc之间的通信.但是考虑到一个问题,如果在Hybr

程序员为什么热衷造轮子

搜索一下"造轮子"或者"程序员为什么喜欢造轮子",会看到很多相关的讨论,这是个老生常谈的话题,很多人谈过了,谈了很多年.不过还是有再谈的必要. "造轮子"的含义: 明知道你做的不可能比前辈做得更好,却仍然坚持要做. 就软件开发而言,"造轮子"是指,"业界已经有公认的软件或者库了,却还坚持要自己做". 在软件开发过程中,有时你想造轮子老板却极力反对,有时你不想造轮子老板却坚持要造一个出来,为什么会有这种两极状