【Unity】文件信息的存储和解析(C#代码)

news2024/9/21 2:44:25

目录

文件存储

两种文件信息解析方法

文件加密处理

文件解密处理

 全部代码


文件存储

一些游戏案例开发过程中的一些数据转换成Json格式,然后存到指定的位置

 //3.将对象转化为Json
 List<Hokag> hokagList = new List<Hokag>()
 {
     new Hokag(){Name="漩涡鸣人",Age=20,Skill="嘴遁"},
     new Hokag(){Name="木叶丸",Age=15,Skill="色诱之术"}
 };
 string json = JsonMapper.ToJson(hokagList);
 json = Regex.Unescape(json);//把Unicode转成中文

 //加密
 DataSecurity dataSecurity = new DataSecurity();



 Debug.Log(json);


 //文件存储
 File.WriteAllText(Application.dataPath + "/Hokalnfor.txt", json, Encoding.UTF8);

两种文件信息解析方法

1.JsonMapper.ToObject去解析json

        //方法1.JsonMapper.ToObject去解析json
        JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        List<Hokag> hokagList = new List<Hokag>();//创建列表,存放信息

        foreach (JsonData item in jsonData)
        {
            Hokag hokag = new Hokag();//创建对象
            //根据键来找到对应的值
            JsonData nameValue = item["Name"];
            JsonData ageValue = item["Age"];
            JsonData skillValue = item["Skill"];

            hokag.Name = nameValue.ToString();
            hokag.Age = Int32.Parse(ageValue.ToString());
            hokag.Skill = skillValue.ToString();
            hokagList.Add(hokag);//添加至列表
        }

        foreach (Hokag item in hokagList)
        {
            Debug.Log(item);
        }

2.使用泛型来解析Json

        //方法2.使用泛型来解析Json
        //JSON里面对象的键必须要和定义的类里面的属性或者字段一致
        Hokag[] hokagArray = JsonMapper.ToObject<Hokag[]>(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        foreach (Hokag item in hokagArray)
        {
            Debug.Log(item);
        }

文件信息的存储和解析在同一个C#文件 JsonText.cs中,需要挂载在空物体上。

需要用到的头文件:

using UnityEngine;
using System.Runtime.Serialization.Json;
using System.Collections.Generic;
using System.Text.RegularExpressions;//转码引用命名空间把Unicode转成中文
using System.IO;//输入输出流
using LitJson;
using System;
using System.Text;

效果:

文件加密处理

新开C#文件DataSecrity.cs

    //加密密钥
    string key = "12345678123456781234567812345678";



    /// <summary>
    /// 字符串加密
    /// </summary>
    /// <param name="toE">要加密的字符串</param>
    /// <returns></returns>
    public string Encript(string toE)
    {


        //将密钥转换为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式
        //创建加密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将要加密的明文字符串转换为byte数组
        byte[] toEncriptArray = UTF8Encoding.UTF8.GetBytes(toE);
        //加密  得到密文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toEncriptArray, 0, toEncriptArray.Length);

        //返回密文字符串
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);

    }


文件解密处理

    /// <summary>
    /// 字符串解密
    /// </summary>
    /// <param name="toD">要解密的字符串</param>
    /// <returns></returns>
    public string Decript(string toD)
    {
        //将密钥转化为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式

        //创建解密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将密文字符串转换位byte数组
        byte[] toDecriptArray = Convert.FromBase64String(toD);
        //解密,得到明文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toDecriptArray, 0, toDecriptArray.Length);
        //返回明文字符串
        return UTF8Encoding.UTF8.GetString(resultArray);

    } 

 全部代码

JsonTest.cs

using UnityEngine;
using System.Runtime.Serialization.Json;
using System.Collections.Generic;
using System.Text.RegularExpressions;//转码引用命名空间把Unicode转成中文
using System.IO;//输入输出流
using LitJson;
using System;
using System.Text;

public class JsonTest : MonoBehaviour
{
   

    void Start()
    {
        方法1.JsonMapper.ToObject去解析json
        //JsonData jsonData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        //List<Hokag> hokagList = new List<Hokag>();//创建列表,存放信息

        //foreach (JsonData item in jsonData)
        //{
        //    Hokag hokag = new Hokag();//创建对象
        //    //根据键来找到对应的值
        //    JsonData nameValue = item["Name"];
        //    JsonData ageValue = item["Age"];
        //    JsonData skillValue = item["Skill"];

        //    hokag.Name = nameValue.ToString();
        //    hokag.Age = Int32.Parse(ageValue.ToString());
        //    hokag.Skill = skillValue.ToString();
        //    hokagList.Add(hokag);//添加至列表
        //}

        //foreach (Hokag item in hokagList)
        //{
        //    Debug.Log(item);
        //}




        方法2.使用泛型来解析Json
        JSON里面对象的键必须要和定义的类里面的属性或者字段一致
        //Hokag[] hokagArray = JsonMapper.ToObject<Hokag[]>(File.ReadAllText(Application.dataPath + "/Hokag.txt"));
        //foreach (Hokag item in hokagArray)
        //{
        //    Debug.Log(item);
        //}



        //3.将对象转化为Json
        List<Hokag> hokagList = new List<Hokag>()
        {
            new Hokag(){Name="漩涡鸣人",Age=20,Skill="嘴遁"},
            new Hokag(){Name="木叶丸",Age=15,Skill="色诱之术"}
        };
        string json = JsonMapper.ToJson(hokagList);
        json = Regex.Unescape(json);//把Unicode转成中文

        //打印前加密处理
        DataSecurity dataSecurity = new DataSecurity();
        json = dataSecurity.Encript(json);//字符串加密


        json = dataSecurity.Decript(json);//字符串解密



        Debug.Log(json);

        //文件存储
        File.WriteAllText(Application.dataPath + "/Hokalnfor.txt", json, Encoding.UTF8);



    }
}

DataSecurity.cs

using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;//密码学命名空间
using System.Text;
using System;

public class DataSecurity
{
    //加密密钥
    string key = "12345678123456781234567812345678";



    /// <summary>
    /// 字符串加密
    /// </summary>
    /// <param name="toE">要加密的字符串</param>
    /// <returns></returns>
    public string Encript(string toE)
    {


        //将密钥转换为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);

        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式
        //创建加密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将要加密的明文字符串转换为byte数组
        byte[] toEncriptArray = UTF8Encoding.UTF8.GetBytes(toE);
        //加密  得到密文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toEncriptArray, 0, toEncriptArray.Length);

        //返回密文字符串
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);

    }

    /// <summary>
    /// 字符串解密
    /// </summary>
    /// <param name="toD">要解密的字符串</param>
    /// <returns></returns>
    public string Decript(string toD)
    {
        //将密钥转化为byte数组
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
        //创建 RijindaelManaged对象
        RijndaelManaged rDel = new RijndaelManaged();
        //设置相关参数
        rDel.Key = keyArray;//密钥
        rDel.Mode = CipherMode.ECB;//块码模式
        rDel.Padding = PaddingMode.PKCS7;//填充模式

        //创建解密器对象
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        //将密文字符串转换位byte数组
        byte[] toDecriptArray = Convert.FromBase64String(toD);
        //解密,得到明文byte数组
        byte[] resultArray = cTransform.TransformFinalBlock(toDecriptArray, 0, toDecriptArray.Length);
        //返回明文字符串
        return UTF8Encoding.UTF8.GetString(resultArray);

    } 

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1212457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UE5】显示或隐藏物体轮廓线

效果 步骤 1. 先下载所需的材质文件“M_Highlight.uasset” 材质下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rxmRhkUoXVq6-DkIKyBhAQ 提取码&#xff1a;55bv 2. 在视口中拖入后期处理体积 根据需求设置后期处理体积的大小或者直接设置无限范围&…

Spring6(四):JUnit、事务

文章目录 5. 单元测试&#xff1a;JUnit5.1 整合JUnit55.2 整合JUnit4 6. 事务6.1 JdbcTemplate6.1.1 准备工作6.1.2 实现CURD①装配 JdbcTemplate②测试增删改功能③查询数据返回对象④查询数据返回list集合⑤查询返回单个的值 6.2 事务6.2.1 编程式事务6.2.2 声明式事务 6.3 …

性能测试 —— 性能问题分析步骤!

前言 性能测试大致分以下几个步骤&#xff1a; 需求分析脚本准备测试执行结果整理问题分析 今天要说的是最后一个步骤——“问题分析”&#xff1b; 需求描述 有一个服务&#xff0c;启动时会加载一个1G的词表文件到内存&#xff0c;请求来了之后&#xff0c;会把请求词去词…

ajax异步传值以及后端接收参数的几种方式

异步传值 第一种呢&#xff0c;也是最简单的一种&#xff0c;通过get提交方式&#xff0c;将参数在链接中以问号的形式进行传递 // 前台传值方法 // 触发该方法调用ajaxfunction testAjax(yourData) {$.ajax({type: "get", // 以get方式发起请求url: "/yo…

童装CPC认证检测哪些内容?童装上架亚马逊美国站CPC认证办理

童装是指适合儿童穿着的服装。按年龄分&#xff0c;包括婴儿服装、儿童服装、童装、中年童装、大童服装。CPC认证即儿童产品证书&#xff08;CPC&#xff09;&#xff0c;主要针对12岁以下的儿童&#xff0c;如玩具、摇篮、童装等。跨境卖家作为“进口商”&#xff0c;想要将中…

AC修炼计划(AtCoder Regular Contest 162)

传送门&#xff1a;AtCoder Regular Contest 162 - AtCoder A题签到 B - Insertion Sort 2 我们可以从头开始一个一个排序&#xff0c;把1通过操作放到第一个&#xff0c;把2通过操作放到第二个。。。以此类推。但会出现一种情况&#xff0c;如果我们所要排的数字在最后一位&…

【解决方案】危化品厂区安防系统EasyCVR+AI智能监控

危化品属于危险、易燃易爆、易中毒行类&#xff0c;一旦在生产运输过程中发生泄漏后果不堪想象&#xff0c;所以危化品的生产储存更需要严密、精细的监控&#xff0c;来保障危化品的安全。EasyCVRTSINGSEE青犀AI智能分析网关搭建的危化品智能监控方案就能很好的为危化品监管保驾…

基于ssm流浪动物救助管理系统

基于ssm流浪动物救助管理系统 摘要 随着城市化的不断发展&#xff0c;流浪动物问题逐渐凸显&#xff0c;而对流浪动物的救助和管理成为社会关注的焦点。本文基于SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架&#xff0c;设计并实现了一套流浪动物救助管理系统。该系…

碾压Fast Request!IDEA插件推荐:Apipost-Helper

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具&#xff0c;而今天给大家介绍一款IDEA插件&…

海外网红营销:品牌建设与获利的平衡策略

随着互联网的迅速发展&#xff0c;社交媒体已经成为了全球范围内广告和市场营销的主要平台。其中&#xff0c;海外网红营销已经成为一种备受关注的趋势&#xff0c;吸引了众多品牌的目光。然而&#xff0c;在这个充满竞争的数字世界里&#xff0c;品牌建设与获利之间的关系一直…

最长上升子序列模型 笔记

首先附上模板&#xff1a; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll;const int N 100010;int n; int a[N], q[N];int main()…

TypeError: Cannot read properties of undefined (reading ‘0‘)

1、在使用<el-dropdown>会报这个错误 原因&#xff1a;使用v-if控制显隐&#xff0c;找不到该节点就会开始报错 解决&#xff1a;使用v-show就可以了

Mac M3 芯片安装 Nginx

Mac M3 芯片安装 Nginx 一、使用 brew 安装 未安装 brew 的可以参考 【Mac 安装 Homebrew】 或者 【Mac M2/M3 芯片环境配置以及常用软件安装-前端】 二、查看 nginx 信息 通过命令行查看 brew info nginx可以看到 nginx 还未在本地安装&#xff0c;显示 Not installed …

零一万物回应「抄袭 LLaMA」;京东原副总裁试用可穿戴人工喉丨 RTE 开发者日报 Vol.85

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

Java聚合对外网关,使用国密SM4采用CBC分组填充模式实现数据加密工具类,Jmeter压测

添加依赖配置 <!-- 仓库地址: https://mvnrepository.com/artifact/commons-codec/commons-codec --><!-- org.apache.commons.codec.binary.Base64 --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artif…

Python爬虫的七个常用技巧总结,这些你一定得知道!

文章目录 前言1、基本抓取网页2、使用代理IP3、Cookies处理4、伪装成浏览器5、验证码的处理6、gzip压缩7、多线程并发抓取关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战…

5+单基因+免疫浸润,这篇肿瘤预后文章你值得拥有

今天给同学们分享一篇生信文章“Systematic analysis of the role of SLC52A2 in multiple human cancers”&#xff0c;这篇文章发表在Cancer Cell Int期刊上&#xff0c;影响因子为5.8。 结果解读&#xff1a; 多种人类癌症中SLC52A2的mRNA表达 首先&#xff0c;作者使用GT…

Linux设备树(DTS)介绍

Dts&#xff1a;DTS即Device Tree Source&#xff0c;是一个文本形式的文件&#xff0c;用于描述硬件信息。一般都是固定信息&#xff0c;无法变更&#xff0c;无法overlay。 设备树由来 linux内核源码中&#xff0c;之前充斥着大量的平台相关&#xff08;platform Device&…

Windows系统CMake+VS编译protobuf

目录 一些名词CMake构建VS工程下载protobuf源码下载CMake编译QT中使用 方案二失败&#xff1a;CMakeQT自带的Mingw编译参考链接 一些名词 lib dll lib库实际上分为两种&#xff0c;一种是静态链接lib库或者叫做静态lib库&#xff0c;另一种叫做动态链接库dll库的lib导入库或称…

为什么程序员一定要写单元测试?

大家好&#xff0c;我是鱼皮&#xff0c;很多初学编程的同学都会认为 “程序员的工作只有开发新功能&#xff0c;功能做完了就完事儿”。但其实不然&#xff0c;保证程序的正常运行、提高程序的稳定性和质量也是程序员的核心工作。 之前给大家分享过企业项目的完整开发流程&am…