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

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 !

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值