C#对象转实体,C#实体转对象,Unity使用Json作为配置文件,Json读取之后全部为乱码

Unity开发中C#脚本中文乱码的终极解决方案:统一UTF-8编码 字符编码是计算机存储和传输文字信息的基础规则,它定义了字符与二进制数据之间的映射关系。从早期的ASCII编码到支持多语言的Unicode标准,编码的演进解决了跨语言、跨平台文本处理的根本问题。在软件开发领域,UTF-8作为Unicode的一种可变长度实现,因其兼容性和广泛支持,已成为跨平台协作和现代应用开发的事实标准。其技术价值在于确保了文本数据在不同系统、编辑器与工具链之间交换时的一致性,避免了因编码错配导致的乱码问题。在Unity游戏开发、Web应用及多语言软件等场景中,正确处理编码是保障代码可读性、团 阅读详情

VS的NuGet安装命令

Install-Package Newtonsoft.Json -Version 13.0.2-beta1

下载连接

https://www.nuget.org/packages/Newtonsoft.Json/13.0.2-beta1

核心代码

对象转json

string jsons = JsonConvert.SerializeObject(program.ammeterGameObjects_LIST);

json转对象

 string Json= FileManager.Instance.ReadFile(Application.streamingAssetsPath + "/" + 在streamingAssets下的路径,在streamingAssets下主要是发布之后也可以更改,无需再次发布也可以更改参数);
         
var listDevice = JsonConvert.DeserializeObject<List<DeviceGameObejct>>(Json);//  <> 中是需要转换的文件类型,小括号中是读取到的json的string,这就得到了对象的list,

读取的文件为乱码

读取的文件为乱码,原因为文件的编码格式和Unity读取的文件的格式不一致,所以需要在读取文件的时候增加一个文件的的读取的编码。
官方文档

示例代码:
      string Json2List= File.ReadAllText(Application.streamingAssetsPath + "/" + @"文件路径", System.Text.Encoding.GetEncoding("GB2312"));//参数为路径和编码格式


//一个简单的方法,读取文件,转换字符集格式,返回对应类型的list
        /// <summary>
        /// 当读取的json的文件为乱码的时候需要转换读取文件的字符编码,一般为GB2312
        /// </summary>
        /// <param name="path">读取文件的路径</param>
        /// <param name="EncodingType">字符集的编码格式</param>
        /// 使用的时候需要将T换成对应的返回值类型即可
        /// <returns></returns>
        public List<T> RetunData(string path, string EncodingType)
        {
            var json2str = System.IO.File.ReadAllText(path, System.Text.Encoding.GetEncoding(EncodingType));//按照指定的字符集读取文件
            var str2Tlist = Newtonsoft.Json.JsonConvert.DeserializeObject<List<T>>(json2str);//字符串转对应格式的list
            return str2Tlist;
        }
        

C#对象转实体

  示例代码
  	//一个对象
    public class AmmeterGameObject
    {
        public MinuteInfo minuteInfo = new MinuteInfo();
        public int Mark;
        public string Name;
    }

     //对象所包含的部分属性
    public class MinuteInfo
    {
        public string Data;
        public int SlaveId;//1234,
        public ushort ParameterAddress;//40001 40002
        public Loaction loaction;
        public float Power = 16.5f;
        public string Unit = "kw/h";
        public float MAX = 0.0F;
        public float MIN = 0.0F;
    }
    
	//一个枚举的属性,枚举的本质上 int 类型。
    public enum Loaction
    {
        All = 1,
        Office,
        Warehosue,
        WorkA,
        WorkB,
    }

然后创建对应的对象,给予对象值

示例代码

//创建对象并将对象赋值
 private void MakeJson()
        {
            AmmeterGameObject ammeterGameObject1 = new AmmeterGameObject()
            {
                minuteInfo = new MinuteInfo()
                {
                    Data = " ",
                    SlaveId = 1,
                    ParameterAddress = 40001,
                    loaction = Loaction.All,
                    Power = 16.5f,

                },
                Mark = 1,
                Name = "小区",
            };
            AmmeterGameObject ammeterGameObject2 = new AmmeterGameObject()
            {
                minuteInfo = new MinuteInfo()
                {
                    Data = " ",
                    SlaveId = 1,
                    ParameterAddress = 40002,
                    loaction = Loaction.All,
                    Power = 16.5f,
                },
                Mark = 2,
                Name = "楼A",
            };
            AmmeterGameObject ammeterGameObject3 = new AmmeterGameObject()
            {
                minuteInfo = new MinuteInfo()
                {
                    Data = " ",
                    SlaveId = 1,
                    ParameterAddress = 40003,
                    loaction = Loaction.Warehosue,
                    Power = 16.5f,
                },
                Mark = 3,
                Name = "楼B",
            };
}

然后就将对象添加到一个对应类型的list中

 示例代码
	
private List<AmmeterGameObject> ammeterGameObjects_LIST = new List<AmmeterGameObject>();

   ammeterGameObjects_LIST.Add(ammeterGameObject1); 		
   ammeterGameObjects_LIST.Add(ammeterGameObject2);
   ammeterGameObjects_LIST.Add(ammeterGameObject3); 

然后转成Json

示例代码
string jsons = JsonConvert.SerializeObject(program.ammeterGameObjects_LIST);

这里需要引用一个DLL,如果是vs可以Alt+Enter来包,然后添加包中的命名空间就可以了,
以上就是对象转成Json

C#实体转对象

依旧使用上面的对象

            string Json= FileManager.Instance.ReadFile(Application.streamingAssetsPath + "/" + 在streamingAssets下的路径,在streamingAssets下主要是发布之后也可以更改,无需再次发布也可以更改参数);
            
            var listDevice = JsonConvert.DeserializeObject<List<DeviceGameObejct>>(Json);//  <> 中是需要转换的文件类型,小括号中是读取到的json的string,这就得到了对象的list,
          

注意到上面在对象转json的时候使用的是AmmeterGameObject 而到了实体转对象使用的是DeviceGameObejct ,这是不影响的,他会自己找到后他属性名称相同的属性赋值,至于不相同的会维持默认值。

不会的私信,

Enjoy !

Unity JSON解析乱码与崩溃?UTF-8 BOM编码问题深度解析与解决方案 字符编码是数据交换和存储的基础,它定义了字符与二进制数据之间的映射规则。UTF-8作为Unicode的一种可变长度编码实现,因其兼容ASCII和高效性,已成为网络传输和文件存储的事实标准。然而,UTF-8 BOM(字节顺序标记)作为一个可选的元数据头,虽旨在标识编码,却常与严格的**数据格式规范**(如JSON RFC 8259)冲突,导致解析器在首个字节就遭遇非法字符,从而引发解析失败、乱码或平台依赖的崩溃。在**Unity开发**实践中,此问题尤为隐蔽,常源于不同工具(如Windows记事本)对BOM的 阅读详情

相关推荐

Unity脚本乱码终结指南:5种方法统一编码为UTF-8无BOM

在跨平台软件开发与团队协作中,文件编码不一致是导致乱码和编译错误的常见根源。其核心原理在于不同操作系统和编辑器对文本文件默认编码的解读不同,例如Windows常用带BOM的UTF-8或ANSI,而macOS/Linux则偏好无BOM的UTF-8。统一使用UTF-8无BOM编码具有重要技术价值,它不仅能消除因编码差异导致的乱码问题,还能避免编译器警告、构建工具兼容性风险以及版本控制系统中的噪音提交。这一实践在游戏开发、尤其是使用Unity引擎的项目中尤为重要,因为C#脚本、Shader和配置文件中的中文注释或

weixin_33860528的博客 413

Unity3d LitJson中文乱码问题

LitJson中文乱码

Manba 712

Unity中文乱码终极解决方案:统一编码与系统设置

字符编码是计算机存储和处理文本信息的基础机制,它定义了字符与二进制数据之间的映射关系。在软件开发中,编码不匹配会导致文本显示异常,特别是包含非ASCII字符(如中文)时。其技术原理在于文件保存编码与读取解码方式不一致,造成二进制数据被错误解析。统一编码标准对于保障代码可读性、团队协作效率和跨平台兼容性具有重要价值。在Unity开发环境中,C#脚本文件常因编码问题出现中文乱码,这主要发生在代码预览、外部编辑器打开等场景。通过将文件编码统一为UTF-8 with BOM,并配置系统区域设置,可以有效解决乱码问题

cuankuangzhong6373的博客 434

C# 读取 json文件中文乱码问题

问题可能是Unity自动将json文件的编码转换为了ASCII码,手动在vs中打开json文件时,提示部分字符格式已被替换,保存后会造成文件改变。解决方法:转到文件夹中用记事本打开,再以utf-8格式保存替换原文件。读取json文件,中文全部变成乱码。

qq_45750353的博客 2168

Unity游戏开发:使用ExcelDataReader实现动态Excel配置表读取与管理

在游戏开发中,数据配置管理是连接策划与程序的关键环节。其核心原理在于将策划常用的Excel表格数据,通过运行时解析直接映射为游戏可用的结构化对象,从而省去繁琐的中间转换步骤。这项技术的价值在于极大地提升了开发效率与协作流畅度,尤其适用于配置表结构频繁变更的项目前期与中期。通过集成ExcelDataReader库并处理跨平台编码问题,开发者可以构建一个高效的数据管理器,实现配置数据的动态加载与内存管理。其典型应用场景包括角色属性、技能效果、关卡配置等游戏数据的定义与调试。本文聚焦于Unity引擎,详细阐述了如

weixin_30235225的博客 331

Unity中文乱码终极解决方案:从编码原理到批量转换脚本

字符编码是计算机存储和显示文字的基础规则,它定义了字节与字符之间的映射关系。在跨平台开发中,编码不统一是导致文本乱码的根本原因,尤其是当系统默认的本地化编码(如GBK)与通用的UTF-8标准冲突时。UTF-8作为国际通用编码,能完美支持多语言,是解决乱码、确保文本一致性的关键技术。其价值在于保障了代码、注释和游戏文本在不同环境和工具间的正确解析与显示,是软件国际化与团队协作的基石。在Unity开发这一具体应用场景中,脚本文件因编辑器设置或历史遗留问题,常出现中文注释和日志输出乱码,这正是编码断层问题的典型体

weixin_30274627的博客 451

Unity中Json数据存储以及读取

此文章基于Unity针对Json的数据存储以及读取进行基础描述。 【注意】首先需要引入外部dll文件,这里使用的是Litjson。 using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using System.IO; using System.Text.Re...

MySQL与Unity交互 1504

Unity Inspector中文乱码终极解决方案:UTF-8编码统一与工程实践

字符编码是计算机存储和处理文本信息的基础规则,它定义了字符与二进制数据之间的映射关系。在跨平台、多语言的软件开发中,编码不一致是导致文本乱码的常见根源。其核心原理在于,当读取文件的程序使用了与文件保存时不同的编码规则进行解码,就会产生无法识别的字符,通常表现为问号或方块。对于使用Unity引擎进行游戏开发的团队而言,正确处理编码问题具有重要的技术价值,它能确保项目资产(如脚本、预制体、场景文件)中的元数据、注释和序列化字符串在不同开发环境和版本控制系统中保持一致性,避免因乱码导致的协作障碍和调试时间浪费。特

weixin_30698297的博客 349

安卓与Unity保存Json文件并读取,实现数据交互

安卓 和Unity 读写 同一Json 文件 Java 代码 : package com.Unity.Tool.AndroidUI; import android.util.Log; import com.google.gson.Gson; import org.apache.commons.text.StringEscapeUtils; import java.io.File; import java.io.FileInputStream; import java.io.FileOut...

梦回唐朝 5017

Unity开发中GB2312编码乱码的根源剖析与自动化批量转换解决方案

字符编码是计算机存储和表示文本信息的基础规则,它定义了字符与二进制数据之间的映射关系。在软件开发中,编码不一致会导致文件内容显示为乱码,其技术原理在于不同编码标准对同一段二进制数据的解释规则不同。统一编码标准对于保障代码可读性、团队协作效率以及版本控制系统的正常工作具有重要价值,尤其是在跨平台、多环境的现代开发流程中。在Unity游戏开发领域,历史遗留的GB2312编码脚本与当前主流的UTF-8标准冲突,是引发“锟斤拷”等乱码现象的典型场景。本文针对这一痛点,提供了从手动诊断到自动化批量处理的完整工程实践方

dingdi3021的博客 486

矩阵束(Matrix Pencil)入门:从通信系统到控制理论,它为何是建模利器?

本文深入探讨矩阵束(Matrix Pencil)在通信系统与控制理论中的关键作用,揭示其作为复杂系统建模利器的独特价值。从MIMO系统的多径干扰分析到电力系统稳定性判据,矩阵束通过`A-λB`方程求解提供精准建模方案,显著提升5G通信和工业控制等领域的性能表现。

weixin_30134145的博客 358

Unity配置文件全攻略:从JSON到Addressables,构建可维护游戏数据系统

在游戏开发中,配置文件是管理可变数据、实现逻辑与数据分离的核心技术。其基本原理是将游戏数值、系统设置等易变内容从硬编码中剥离,存储为外部文件,程序运行时动态读取。这种设计模式的价值在于提升了项目的可维护性、可扩展性,并支持热更新与多环境适配。典型的应用场景包括游戏数值平衡、多语言本地化、用户设置及动态运营活动。针对不同需求,技术选型至关重要:简单的键值对存储可使用PlayerPrefs,结构化数据推荐JSON/XML结合版本管理,而复杂对象引用和编辑器友好性则指向ScriptableObject。对于需要热

weixin_34129696的博客 391

eNSP安装教程

eNSP安装教程一、安装eNSP1、先安装依赖组件2、安装eNSP主程序eNSP+V100R003C00SPC100+Setup ---不要安装在中文路径下3、安装完成后注册设备 一、安装eNSP 程序包位置:https://drive.weixin.qq.com/s?k=AOgAQQfOAAsw1wAKEgAAcAbgbSAKQ 1、先安装依赖组件 依赖组件: WinPcap_4_1_3 —直接下一步,但不要安装在中文路径下 Wireshark_v3.4.6 或者wireshark-win3

qimowei的博客 8668

彻底解决Unity脚本中文乱码:从编码原理到一劳永逸的配置方案

在软件开发中,文件编码是确保文本信息在不同系统和工具间正确交换的基础。字符编码(如UTF-8、GBK)定义了字符与二进制数据的映射规则,而编码不匹配是导致文本乱码的根本原因。理解编码原理对于跨平台协作和国际化开发至关重要,其技术价值在于保障代码可读性、维护版本控制清晰度以及提升团队协作效率。在实际开发场景中,尤其是在使用Unity引擎进行游戏开发时,新建的C#脚本常因模板文件编码与代码编辑器默认设置不一致,出现“锟斤拷”等中文乱码问题。本文聚焦于这一具体痛点,深入剖析编码、BOM(字节顺序标记)与编辑器之间

341

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1164

STM32F030F4P6实战:LL库+DMA驱动WS2812全流程(附避坑指南)

本文详细介绍了如何使用STM32F030F4P6的LL库和DMA驱动WS2812 LED灯带的全流程,包括硬件选型、CubeMX配置、LL库与DMA关键实现、数据格式转换及调试技巧。特别提供了避坑指南,帮助开发者避免常见错误,提升开发效率。

weixin_29194693的博客 484

Unity WebGL jslib字符串传递:从乱码到精准通信的完整解决方案

在Web开发中,跨语言数据交互是常见需求,尤其在游戏与网页深度融合的场景下。其核心原理涉及不同运行环境间的数据编组与类型转换机制。Unity WebGL项目通过Emscripten编译为WebAssembly,与JavaScript的通信需经过特定桥接层,此时数据类型的边界处理尤为关键。对于字符串这类复杂引用类型,默认的隐式转换常导致内容丢失或类型错误,例如数字字符串被误转为数值,破坏了数据完整性。本文聚焦于**Unity WebGL**与**JavaScript**互操作中的字符串传递难题,深入剖析其底层

a1311010193的博客 300

YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2023 FasterNet 高效快速的部分卷积块

本文记录的是基于FasterNet的YOLOv11轻量化改进方法研究。FasterNet的网络结构借鉴 CNN 的设计理念,通过提出的PConv减少推理时的计算和内存成本,同时减少通道数并增加部分比例,降低延迟,并通过后续的PWConv来弥补特征信息可能缺失的问题,提高了准确性。本文在替换骨干网络中配置了原论文中的和六种模型,以满足不同的需求。

Limiiiing的博客 2029

告别乱码:在Unity团队中强制实施UTF-8编码规范

本文深入分析了Unity团队开发中因文件编码不统一导致的乱码问题,并提供了通过配置.editorconfig文件强制实施UTF-8编码规范的一劳永逸方案。该方案能自动化统一C#脚本、Shader、JSON等各类文件的编码,有效解决协作灾难、版本控制冲突和跨平台兼容性问题,是提升团队开发效率的关键基建。

weixin_29010003的博客 408

YOLOv11涨点改进 | 全网独家创新,注意力改进篇 | TGRS 2025 | 引入APCM自适应像素级协同机制,动态增强目标区域、抑制背景噪声,助力YOLOv11做红外小目标检测有效涨点

本文提出了一种基于APCM模块改进的YOLOv11网络模型,通过像素级局部-全局协同建模增强目标特征并抑制背景噪声。APCM模块采用轻量化设计,无需复杂参数,能有效提升小目标检测性能。文章详细介绍了APCM的原理、优势及其在红外小目标检测中的应用,包括模块结构、核心代码实现和YAML配置文件修改方法。实验结果表明,该方法在NUAA-SIRST和IRSTD-1K数据集上优于现有技术,显著提高了复杂场景下的检测精度与鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 116

Amazon SES 移出沙盒完整指南 & 高通过率模板

AWS SES沙盒模式转正式模式申请指南 申请正式模式需通过AWS审核,常见被拒原因包括邮件用途不清晰、缺少退订机制或发送量不合理。人工申诉需登录AWS Support Center提交服务限额提升请求,填写详细的公司信息、邮件用途及合规措施。 高通过率申诉模板需包含: 公司信息:名称、网址及与AWS的合作情况。 邮件规范:明确类型(交易/营销)、退订链接及退信处理机制。 发送计划:合理预估发送量,确保合规。 关键点:真实信息、用途清晰、退订机制完善、发送量合理。首次被拒可修改后重新提交。

xianyinsuifeng的博客 328

Unity WebGL读取Excel数据:浏览器文件交互与数据解析实战

在数据驱动的应用开发中,Excel作为广泛使用的数据存储格式,其读取与解析是常见的基础需求。传统上,C#开发者可通过System.IO配合EPPlus、NPOI等库直接操作文件。然而,当应用发布至WebGL平台时,浏览器的安全沙箱机制严格限制了本地文件系统的直接访问,使得传统文件路径操作完全失效。其技术价值在于构建一套跨越浏览器JavaScript与Unity C#运行时的安全、高效的数据通信管道,这是实现Web端**数据可视化**、在线配置工具等**数字孪生**应用的关键支撑。本文聚焦于解决这一核心矛盾,

weixin_34115824的博客 341

基于YOLO的印章检测及文字识别

针对印章自动化检测与文字识别需求,提出了一种融合改进YOLO模型与OCR技术的端到端解决方案,旨在解决复杂背景干扰、印章残缺变形及环形文字排列等难题

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 8219
上一篇: c#的深拷贝和浅拷贝,引用类型与值类型
下一篇: Unity使用MQTT本地调试测试,Unity的MQTT本地调试BUG记录以及解决方式
先生沉默先
博客等级 码龄6年 920粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值