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>(Json);//  <> 中是需要转换的文件类型,小括号中是读取到的json的string,这就得到了对象的list,

读取的文件为乱码

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

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


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

   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>(Json);//  <> 中是需要转换的文件类型,小括号中是读取到的json的string,这就得到了对象的list,
          

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

不会的私信,

Enjoy !

你可能感兴趣的:(#,C#,c#,unity,json)