json使用实例二

上面是我们在上一篇文章中请求返回来的JSON字符串,那么我们现在要解析他。第一步就是要根据这个JSON来写出对应的实体类。用来存放数据。这个实体类如何写的?其实非常简单。因为一般

不需要手动自己写,当然,你要是喜欢也可以自己写。不过我一般使用网站直接转换。自己百度 查一下,JSON转C#实体类,就会有很多网站给你转。

我使用的是这个网站:http://www.bejson.com/convert/json2csharp/

使用很简单,把JSON放进去,点击生成就可以自动生成一个实体类。其实是两个类,不过一般我们写在一个文件里。

json文件

{"message":"ok","nu":"367847964498","ischeck":"1","com":"shunfeng","status":"200","condition":"F00","state":"3","data":[{"time":"2020-04-22 13:07:13","context":"查无结果","ftime":"2020-04-22 13:07:13"}]}

实体类创建好后,我们还需要一个DLL文件,Newtonsoft.Json.DLL,这个文件哪里来呢?很简单,百度一下不就来了。。。。这个DLL的官方网站是:https://www.newtonsoft.com/json

下载下来后,引入,引用(这两个步骤就不需要我教了吧~不懂就百度~)

做完这准备工作后,就进入大家最喜欢的写代码环节了。非常简单,一句代码搞定。自己看吧!

PS,我们接着使用上一篇文章用到的项目,添加一个按钮,在按钮里面写事件。代码如下:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;


namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// JSON数据的实体类
        /// </summary>
        public class Root
        {
            /// <summary>
            /// 
            /// </summary>
            public string message { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string nu { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string ischeck { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string condition { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string com { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string status { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string state { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public List<DataItem> data { get; set; }
        }
        public class DataItem
        {
            /// <summary>
            /// 
            /// </summary>
            public string time { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string ftime { get; set; }
            /// <summary>
            /// 已签收,感谢使用顺丰,期待再次为您服务
            /// </summary>
            public string context { get; set; }
            /// <summary>
            /// 
            /// </summary>
            public string location { get; set; }
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string getJson = File.ReadAllText("config.json");

            //这个需要引入Newtonsoft.Json这个DLL并using
            //传入我们的实体类还有需要解析的JSON字符串这样就OK了。然后就可以通过实体类使用数据了。
            Root rt = JsonConvert.DeserializeObject<Root>(getJson);
            //这样就可以取出json数据里面的值
            MessageBox.Show("com=" + rt.com + "\r\n" + "condition=" + rt.condition + "\r\n" + "ischeck=" + rt.ischeck + "\r\n" + "state=" + rt.state + "\r\n" + "status=" + rt.status);
            //由于这个JSON字符串的 public List<DataItem> data 是一个集合,所以我们需要遍历集合里面的所有数据
            for (int i = 0; i < rt.data.Count; i++)
            {
                MessageBox.Show("Data=" + rt.data[i].context + "\r\n" + rt.data[i].location + "\r\n" + rt.data[i].time + "\r\n" + rt.data[i].ftime);
            }
        }
    }
}

反序列化JSON数据,也就是将实体类转化成JSON数据,其实也非常简单,说白了,就是将实体初始化

  private void button3_Click(object sender, EventArgs e)
        {
            //生成JSON字符串,其实就把我们刚刚写的实体实体赋值
            Root rt = new Root();
            rt.com="这个是我赋值的com";
            rt.condition="这个是我赋值的condition";
            rt.ischeck="这个是我赋值的ischeck";
            rt.message="这个是我赋值的message";
            rt.state="这个是我赋值的satate";
            rt.status="这个是我赋值的statcs";
            List<DataItem> data  =new List<DataItem>();
            DataItem dt = new DataItem();
            dt.context="这个是我赋值的内容";
            dt.time="这个是我赋值的时间";
            dt.ftime="这个是我赋值的时间";
            data.Add(dt);
            rt.data=data;
            //把我们初始化好的对象传入即可
            string json = JsonConvert.SerializeObject(rt);
            MessageBox.Show(json);
        }

也可以参考以下实例

static public void LoadUsers()
        {
            String userfile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "users\\user.json");

            try
            {
                Users = JsonConvert.DeserializeObject<List<User>>(File.ReadAllText(userfile));

            }
            catch { }
        }

        void SaveUsers()
        {
            try
            {
                String userfile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "users");
                if (!Directory.Exists(userfile))
                {
                    Directory.CreateDirectory(userfile);
                }

                userfile = Path.Combine(userfile, "user.json");
                string output = JsonConvert.SerializeObject(Users);
                File.WriteAllText(userfile, output);
            }
            catch { }
        }

本文分享自微信公众号 - CSharp编程大全(y438679770)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C#调用C++编写的DLL

    1 把DLL放在C#工程的Debug文件夹跟Release文件夹,我这里是使用X86编译的就放在了这两文件夹

    zls365
  • C#中方法的调用

    * 类型需要一致,double--float,子类可以替换父类(反例) * 数量需要一致,params,还可以有默认值(反例) * 顺序需要一致 ,可以使用“参...

    zls365
  • C#中Lambda表达式总结

    在C#的语法中有一种比较特殊的写法,叫做Lambda表达式,这种表达式的写法在于你查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>。例如,我们要查...

    zls365
  • WPF中实现Eventbus

    在开发Android或Vue前端的时候,我们可能数据产生后需要在多个页面接收,这时候可以用EventBus来实现,那么WPF开发能用EventBus吗?我没就来...

    剑行者
  • Magicodes.WeiChat——发送模板消息

    在微信开发中,经常会使用到模板消息。因此框架中对此进行了一些封装,并且提供了后台操作界面以及日志查看等功能,下面开始逐步介绍开发操作以及使用。

    雪雁-心莱科技
  • Magicodes.IE之Excel模板导出教材订购表

    本教程主要说明如果使用Magicodes.IE.Excel完成教材订购表的Excel模板导出。

    雪雁-心莱科技
  • Excel模板导出之导出教材订购表

    本教程主要说明如果使用Magicodes.IE.Excel完成教材订购表的Excel模板导出。

    心莱科技雪雁
  • GenericFactoryMethod泛型工厂模式实现简单IOC功能

    泛型工厂理论上不算Gof23中设计模式之一,但是也算是一种非常好的设计模式,个人认为,废话不多说,先写个简单的抽象工厂,在写一个泛型工厂的例子来比较抽象和泛型的...

    郑小超.
  • C# http Get/POST请求封装类

    http://www.sufeinet.com/thread-3-1-1.html

    跟着阿笨一起玩NET
  • c# 获取电脑硬件信息通用查询类[测试通过]

    C#获取电脑硬件信息通用类[Computer]代码展示和分析,简介如下: 1.项目中添加System.Management引用。 2.添加类Computer,把...

    Java中文社群_老王

扫码关注云+社区

领取腾讯云代金券