Unity精品专栏之序列化操作之Json案例篇(上)

1.3 Json案例:使用Unity解析上述复合JSON

前言

通过本篇博客,我会和大家通过一个案例来学习Json的操作,希望本篇博客能为大家的工作过程中带来一些帮助与启发。

在这里插入图片描述

若当前文章对你有所帮助,欢迎关注微信公众号小小Unity,我会定期在微信公众号上发布一些关于Unity的专栏知识与一些开发资源
欢迎关注小小Unity微信公众号

1.3.1 分析JSON值

首先我们需要分析上述JSON文档都有什么,根据规则分析出它包含以下值:

  • 对象

  • 字符串

  • 数字

  • 数组

但是此JSON文档中是多层嵌套关系,对象包含对象,数组包含对象,对象包含数组,这样我们解析下来会很麻烦,但是同时,如果我们将这个JSON文档也解析出来了那我们以后解析各种各样不同复杂程度的JSON文档都不在难倒我们

根据以上JSON文档内容我们可以开发背包装备查看DEMO,由于是DEMO级的,在这里面我们不会对其界面UI进行深入开发,着重开发的还是本章的重点内容解析JSON 。

1.3.2 解析JSON前准备

首先我们将以上JSON文档保存并放在我们工程的Resources>文件目录下,将其命名为“Unity精品专栏之序列化操作之JSON实例”>

图片

再次我们需要在Plugins文件中引入LitJson.dll文件,这个动态库会帮助我们解析JSON文档

图片

最后我们需要借助网上的一个功能“JSON转C#实体类”这是我自己使用的一个网站:https://www.sojson.com/json2csharp.html

图片

将我们的JSON文档复制进去点击生成实体即可,并将结果复制出来为以后解析做准备。

图片

OK,接下来我们要回到Unity中,在Scripts中新建一个文件夹Json并在里面创建代码命名为“JsonDatabase”,并将我们刚在外部网站上生成的实体类复制进去即可。

代码如下:

public class GetPosition
{
    /// <summary>
    /// 
    /// </summary>
    public double lat { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public double lng { get; set; }
}

public class ElementsItem
{
    /// <summary>
    /// 
    /// </summary>
    public int id { get; set; }
    /// <summary>
    /// 无影剑-艾雷诺
    /// </summary>
    public string name { get; set; }
    /// <summary>
    /// Json/Equip/无影剑-艾雷诺
    /// </summary>
    public string icon { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int count { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public GetPosition getPosition { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string hasShell { get; set; }
    /// <summary>
    /// 史诗
    /// </summary>
    public string quality { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public int price { get; set; }
    /// <summary>
    /// DNF中史诗装备
    /// </summary>
    public string infomation { get; set; }
}

public class SearchDataItem
{
    /// <summary>
    /// 
    /// </summary>
    public List<ElementsItem> elements { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string type { get; set; }
    /// <summary>
    /// 热门装备
    /// </summary>
    public string title { get; set; }
}

public class Data
{
    /// <summary>
    /// 
    /// </summary>
    public List<SearchDataItem> searchData { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string dateTime { get; set; }
}

public class Root
{
    /// <summary>
    /// Unity精品专栏之序列化Json操作Json
    /// </summary>
    public string project { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public string projectTime { get; set; }
    /// <summary>
    /// 
    /// </summary>
    public Data data { get; set; }
}

但是实体代码复制过来了不能说明我们能马上使用,在这里我们在来分析一下我们的Json文档:
我们可以看出在文档中我们有以下的数据不需要解析:

  • project

  • projectTime

  • dateTime

所以排除下来我们需要解析的仅仅只有searchData。
由此我们需要根据我们的分析结构修改我们的实体类,代码如下:

namespace XIAOXIAOUnity.Serialize.Json
{
    /*
     * / <summary>
     * /  Author:xiaoxiaoUnity
     * / data:2021.01.08
     * / Json解析后数据储存类
     * / </summary>
     */
    public class JsonDatabase
    {
        /*
         * / <summary>
         * / 坐标
         * / </summary>
         */
        public class Location
        {
            /*
             * / <summary>
             * /
             * / </summary>
             */
            public double Lat {
                get; set;
            }
            /*
             * / <summary>
             * /
             * / </summary>
             */
            public double Lng {
                get; set;
            }
            public Location( double lat, double lng )
            {
                this.Lat	= lat;
                this.Lng	= lng;
            }
        }

        /*
         * / <summary>
         * / 装备信息
         * / </summary>
         */
        public class ElementsItem
        {
            /*
             * / <summary>
             * /
             * / </summary>
             */
            public int Id {
                get; set;
            }
            /*
             * / <summary>
             * / 
             * / </summary>
             */
            public string Name {
                get; set;
            }
            /*
             * / <summary>
             * /
             * / </summary>
             */
            public string Icon {
                get; set;
            }
            /*
             * / <summary>
             * /
             * / </summary>
             */
            public int count {
                get; set;
            }
            /*
             * / <summary>
             * /
             * / </summary>
             */
            public Location Location {
                get; set;
            }
            /*
             * / <summary>
             * /
             * / </summary>
             */
            public string HasSell {
                get; set;
            }
            /*
             * / <summary>
             * / 
             * / </summary>
             */
            public string Quailty {
                get; set;
            }
            /*
             * / <summary>
             * /
             * / </summary>
             */
            public string Infomation {
                get; set;
            }
            public int Price {
                get; set;
            }
            /*
             * / <summary>
             * / 构造函数
             * / </summary>
             * / <param name="id"></param>
             * / <param name="name"></param>
             * / <param name="icon"></param>
             * / <param name="vis"></param>
             * / <param name="location"></param>
             * / <param name="has"></param>
             * / <param name="info"></param>
             * / <param name="quality"></param>
             * / <param name="price"></param>
             */
            public ElementsItem( int id, string name, string icon, int vis, Location location, string has, string info, string quality, int price )
            {
                this.Id		= id;
                this.Name	= name;
                this.Icon	= icon;
                this.count	= vis;
                this.Location	= location;
                this.HasSell	= has;
                this.Infomation = info;
                this.Quailty	= quality;
                this.Price	= price;
            }
        }
    }
}

到此我们的准备工作才算完成,接下来我们要正式开始对以上JSON进行开发。

已标记关键词 清除标记
相关推荐
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页