当前位置: 首页 > news >正文

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

上代码: 

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();

            //反序列化类
            //定义一个JSON字符串   
            string jsonTextc = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
            //反序列化JSON字符串,将JSON字符串转换成LIST列表  
            List<Customer> _list = JsonConvert.DeserializeObject<List<Customer>>(jsonTextc);
            //读取列表中的值  
            Console.WriteLine(_list[1].a);   //输出结果:aaa2
            foreach (Customer c in _list)
            {
                Console.WriteLine(c.c);  //输出结果ccc  ccc2
            }
            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; }
        }

        /// <summary>    
        ///Customer 的摘要说明    
        /// </summary>    
        public class Customer
        {
            //在序列化前后没有变动    
            public string a
            { get; set; }
            //在序列化前后设置和重置    
            public string b
            { get; set; }
            //设置为null,但在序列化后填充    
            public string c
            { get; set; }
            public string Other
            { get; set; }
            public Customer()
            {
                //    
                //TODO: 在此处添加构造函数逻辑    
                //    
                a = "";
                b = "";
                c = "";
                Other = null;
            }
        }
  
        //应用实例:
        //result.Data.PayHtml = JsonConvert.DeserializeObject<WxPayHtml>(implResult.ReturnValue.PayInfo.Replace("package", "packagevalue"));

        //public class WxPrePayIdResponse
        //{
        //    public WxPayHtml PayHtml { get; set; }
        //}

        ///// <summary>
        ///// 微信要序列成对象的实体参数
        ///// </summary>
        //public class WxPayHtml
        //{
        //    public string appid { get; set; }
        //    public string partnerid { get; set; }
        //    public string prepayid { get; set; }
        //    public string noncestr { get; set; }
        //    public string timestamp { get; set; }
        //    public string appkey { get; set; }
        //    public string packagevalue { get; set; }
        //    public string sign { get; set; }
        //}

/*"PayHtml": {
"appid": "wx257b0d84993abd65",
"partnerid": "1223710101",
"prepayid": "8201038000151225260ec7a972158a17",
"noncestr": "41c542dfe6e4fc3deb251d64cf6ed2e4",
"timestamp": "1451053391",
"appkey": "4VAICNn3cH84oUgvIPiQiRFCxYTmvCMqGl4Afk4dxZsgXGCudgf8tvkKPU40HAXa4M4NOCTN9o4NqbSD7Vo3jd9w3ulZ4l69BG0xlpAQYyjDVMk9brEv4v7HA2kswARc",
"packagevalue": "Sign=WXPay",
"sign": "e0c1075e4f53f8ed40d37719c3a2a4bac8994f23"
}*/

    }
}

 

上效果:

上附件:

点击下载

 

引用  System.Web.Extensions

    /// <summary>
    /// JSON Serializer using JavaScriptSerializer
    /// </summary>
    public class DefaultJsonSerializer : IJsonSerializer
    {
        private readonly JavaScriptSerializer serializer = new JavaScriptSerializer();

        /// <summary>
        /// Serialize an object to JSON string
        /// </summary>
        /// <param name="obj">object</param>
        /// <returns>JSON string</returns>
        public string Serialize(object obj)
        {
            return serializer.Serialize(obj);
        }

        /// <summary>
        /// Deserialize a JSON string to typed object.
        /// </summary>
        /// <typeparam name="T">type of object</typeparam>
        /// <param name="json">JSON string</param>
        /// <returns>typed object</returns>
        public T Deserialize<T>(string json)
        {
            return serializer.Deserialize<T>(json);
        }
    }

 

using Newtonsoft.Json;
using JsonSerializer = ServiceStack.Text.JsonSerializer;

namespace JWT.Tests
{
    public class ServiceStackJsonSerializer : IJsonSerializer
    {
        public string Serialize(object obj)
        {
            return JsonSerializer.SerializeToString(obj);
        }

        public T Deserialize<T>(string json)
        {
            return JsonSerializer.DeserializeFromString<T>(json);
        }
    }

    public class NewtonJsonSerializer : IJsonSerializer
    {
        public string Serialize(object obj)
        {
            return JsonConvert.SerializeObject(obj);
        }

        public T Deserialize<T>(string json)
        {
            return JsonConvert.DeserializeObject<T>(json);
        }
    }
}

 

    /// <summary>
    /// Provides JSON Serialize and Deserialize.  Allows custom serializers used.
    /// </summary>
    public interface IJsonSerializer
    {
        /// <summary>
        /// Serialize an object to JSON string
        /// </summary>
        /// <param name="obj">object</param>
        /// <returns>JSON string</returns>
        string Serialize(object obj);

        /// <summary>
        /// Deserialize a JSON string to typed object.
        /// </summary>
        /// <typeparam name="T">type of object</typeparam>
        /// <param name="json">JSON string</param>
        /// <returns>typed object</returns>
        T Deserialize<T>(string json);
    }

 

https://www.cnblogs.com/yanweidie/p/4605212.html     Newtonsoft.Json高级用法 

 

ServiceStack.Text.JsnSerializer

相关文章:

  • C/C++ 库函数 是否调用 WinAPI
  • 构造汽车
  • 违反约束或者主外键删除数据
  • 不平衡学习方法理论和实战总结
  • Windows Cygwin Redis 安装(转)
  • apche commons项目简介
  • CAS (2) —— Mac下配置CAS到Tomcat(客户端)
  • Median of Two Sorted Arrays
  • 固态硬盘上安装Windows8(ghost)启动问题
  • 王家林每日大数据语录Spark篇0003
  • [hive小技巧]同一份数据多种处理
  • 【191】◀▶ Powershell 命令集 Cmdlets
  • Github访问慢解决办法
  • ActionContext 中的数据详解
  • SpringMVC格式总结
  • hexo+github搭建个人博客
  • 【mysql】环境安装、服务启动、密码设置
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • java正则表式的使用
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 飞驰在Mesos的涡轮引擎上
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端工程化(Gulp、Webpack)-webpack
  • 深入浏览器事件循环的本质
  • 我看到的前端
  • 智能网联汽车信息安全
  • 2017年360最后一道编程题
  • 阿里云服务器购买完整流程
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (+4)2.2UML建模图
  • (C++17) std算法之执行策略 execution
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (超详细)语音信号处理之特征提取
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (七)c52学习之旅-中断
  • (新)网络工程师考点串讲与真题详解
  • (一)kafka实战——kafka源码编译启动
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .Net CF下精确的计时器
  • .net和php怎么连接,php和apache之间如何连接
  • @AliasFor注解
  • @AutoConfigurationPackage的使用
  • @Autowired自动装配
  • @Pointcut 使用
  • [<死锁专题>]