json使用实例二

时间:2022-07-23
本文章向大家介绍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 + "rn" + "condition=" + rt.condition + "rn" + "ischeck=" + rt.ischeck + "rn" + "state=" + rt.state + "rn" + "status=" + rt.status);
            //由于这个JSON字符串的 public List<DataItem> data 是一个集合,所以我们需要遍历集合里面的所有数据
            for (int i = 0; i < rt.data.Count; i++)
            {
                MessageBox.Show("Data=" + rt.data[i].context + "rn" + rt.data[i].location + "rn" + rt.data[i].time + "rn" + 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 { }
        }