前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >json使用实例二

json使用实例二

作者头像
zls365
发布2020-08-19 11:51:44
5950
发布2020-08-19 11:51:44
举报
文章被收录于专栏:CSharp编程大全CSharp编程大全

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

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

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

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

json文件

代码语言:javascript
复制
{"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,我们接着使用上一篇文章用到的项目,添加一个按钮,在按钮里面写事件。代码如下:

代码语言:javascript
复制
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数据,其实也非常简单,说白了,就是将实体初始化

代码语言:javascript
复制
  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);
        }

也可以参考以下实例

代码语言:javascript
复制
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 { }
        }
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSharp编程大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档