Install-Package Newtonsoft.Json -Version 13.0.2-beta1
下载连接
https://www.nuget.org/packages/Newtonsoft.Json/13.0.2-beta1
string jsons = JsonConvert.SerializeObject(program.ammeterGameObjects_LIST);
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;
}
示例代码
//一个对象
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
依旧使用上面的对象
string Json= FileManager.Instance.ReadFile(Application.streamingAssetsPath + "/" + 在streamingAssets下的路径,在streamingAssets下主要是发布之后也可以更改,无需再次发布也可以更改参数);
var listDevice = JsonConvert.DeserializeObject>(Json);// <> 中是需要转换的文件类型,小括号中是读取到的json的string,这就得到了对象的list,
注意到上面在对象转json的时候使用的是AmmeterGameObject 而到了实体转对象使用的是DeviceGameObejct ,这是不影响的,他会自己找到后他属性名称相同的属性赋值,至于不相同的会维持默认值。