找不到正确使用 JSON.NET 的方法
Can't find a way to use JSON.NET correctly
大家好,我尝试将 JSON.NET 与我的 json 文件一起使用。我想要一个对象集合来遍历并获取我想要的信息。
这是我的 json 文件
[编辑解释] 我有一个发射器集合(这里有 3 个,但我稍后会添加更多具有相同属性的发射器)。我需要能够遍历所有这些并知道它们是否已解锁。如果他们解锁了我需要把他们的属性用于一些计算。
{
"Canon":{
"Unlock": true,
"FireRate": 0,
"IsRotate": false,
"RotateSpeed": 0,
"NumberOfBullets": 0
},
"Rotator":{
"Unlock": false,
"FireRate": 0,
"IsRotate": true,
"RotateSpeed": 0,
"NumberOfBullets": 0
},
"Back":{
"Unlock": false,
"FireRate": 0,
"IsRotate": false,
"RotateSpeed": 0,
"NumberOfBullets": 0
}
}
这是我的 类 映射
[System.Serializable]
public class Canon
{
public bool Unlock { get; set; }
public int FireRate { get; set; }
public bool IsRotate { get; set; }
public int RotateSpeed { get; set; }
public int NumberOfBullets { get; set; }
}
[System.Serializable]
public class Rotator
{
public bool Unlock { get; set; }
public int FireRate { get; set; }
public bool IsRotate { get; set; }
public int RotateSpeed { get; set; }
public int NumberOfBullets { get; set; }
}
[System.Serializable]
public class Back
{
public bool Unlock { get; set; }
public int FireRate { get; set; }
public bool IsRotate { get; set; }
public int RotateSpeed { get; set; }
public int NumberOfBullets { get; set; }
}
[System.Serializable]
public class Launchers
{
public Canon Canon { get; set; }
public Rotator Rotator { get; set; }
public Back Back { get; set; }
}
我曾尝试使用 JObject、JArray 等,但找不到能够执行类似操作的正确方法(在这种情况下,它根本不起作用 :( ))。
void Start()
{
List<Launchers> jsonList = ReadJson(Application.dataPath + "/Resources/BDD/Launchers.json");
if(jsonList != null){
foreach (var item in jsonList)
{
if(item.Unlock){
// Do something
}
}
}
}
static List<Launchers> ReadJson(string pathToJsonFile){
if(File.Exists(pathToJsonFile)){
JObject myjsonfile = JObject.Parse(File.ReadAllText(pathToJsonFile));
List<Launchers> launcherList = JsonConvert.DeserializeObject<List<Launchers>>(myjsonfile .ToString());
return launcherList;
}else{
return null;
}
}
很抱歉 post 但如果有人有一些 hints/solution,将不胜感激
好的,感谢@jonSkeet,我做了一些更改,现在一切正常!这是我为帮助和我有同样问题的人所做的更改。
首先更改了我的 json 文件以反映我真正想要的(例如:真实的启动器列表):
{
"Launchers": [{
"Name": "Canon",
"Unlock": true,
"FireRate": 0,
"IsRotate": false,
"RotateSpeed": 0,
"NumberOfBullets": 0
},
{
"Name": "Rotator",
"Unlock": false,
"FireRate": 0,
"IsRotate": true,
"RotateSpeed": 0,
"NumberOfBullets": 0
},
{
"Name": "Back",
"Unlock": false,
"FireRate": 0,
"IsRotate": false,
"RotateSpeed": 0,
"NumberOfBullets": 0
}
]
}
然后我将我的映射更改为:
public class Launcher
{
public string Name { get; set; }
public bool Unlock { get; set; }
public int FireRate { get; set; }
public bool IsRotate { get; set; }
public int RotateSpeed { get; set; }
public int NumberOfBullets { get; set; }
}
public class Listlaunchers
{
public IList<Launcher> Launchers { get; set; }
}
最后是我的最后一段代码,可以按我的意愿使用它:
void Start()
{
Listlaunchers jsonList = ReadJson(Application.dataPath + "/Resources/BDD/Launchers.json");
if(jsonList != null){
foreach (var item in jsonList.Launchers)
{
Debug.Log("LAUNCHER JSON => " + item.Name + " => " + item.Unlock);
}
}
}
static Listlaunchers ReadJson(string pathToJsonFile){
if(File.Exists(pathToJsonFile)){
JObject objectJson = JObject.Parse(File.ReadAllText(pathToJsonFile));
Listlaunchers launcherList = JsonConvert.DeserializeObject<Listlaunchers>(objectJson.ToString());
return launcherList;
}else{
return null;
}
}
谢谢你帮助我!
大家好,我尝试将 JSON.NET 与我的 json 文件一起使用。我想要一个对象集合来遍历并获取我想要的信息。
这是我的 json 文件 [编辑解释] 我有一个发射器集合(这里有 3 个,但我稍后会添加更多具有相同属性的发射器)。我需要能够遍历所有这些并知道它们是否已解锁。如果他们解锁了我需要把他们的属性用于一些计算。
{
"Canon":{
"Unlock": true,
"FireRate": 0,
"IsRotate": false,
"RotateSpeed": 0,
"NumberOfBullets": 0
},
"Rotator":{
"Unlock": false,
"FireRate": 0,
"IsRotate": true,
"RotateSpeed": 0,
"NumberOfBullets": 0
},
"Back":{
"Unlock": false,
"FireRate": 0,
"IsRotate": false,
"RotateSpeed": 0,
"NumberOfBullets": 0
}
}
这是我的 类 映射
[System.Serializable]
public class Canon
{
public bool Unlock { get; set; }
public int FireRate { get; set; }
public bool IsRotate { get; set; }
public int RotateSpeed { get; set; }
public int NumberOfBullets { get; set; }
}
[System.Serializable]
public class Rotator
{
public bool Unlock { get; set; }
public int FireRate { get; set; }
public bool IsRotate { get; set; }
public int RotateSpeed { get; set; }
public int NumberOfBullets { get; set; }
}
[System.Serializable]
public class Back
{
public bool Unlock { get; set; }
public int FireRate { get; set; }
public bool IsRotate { get; set; }
public int RotateSpeed { get; set; }
public int NumberOfBullets { get; set; }
}
[System.Serializable]
public class Launchers
{
public Canon Canon { get; set; }
public Rotator Rotator { get; set; }
public Back Back { get; set; }
}
我曾尝试使用 JObject、JArray 等,但找不到能够执行类似操作的正确方法(在这种情况下,它根本不起作用 :( ))。
void Start()
{
List<Launchers> jsonList = ReadJson(Application.dataPath + "/Resources/BDD/Launchers.json");
if(jsonList != null){
foreach (var item in jsonList)
{
if(item.Unlock){
// Do something
}
}
}
}
static List<Launchers> ReadJson(string pathToJsonFile){
if(File.Exists(pathToJsonFile)){
JObject myjsonfile = JObject.Parse(File.ReadAllText(pathToJsonFile));
List<Launchers> launcherList = JsonConvert.DeserializeObject<List<Launchers>>(myjsonfile .ToString());
return launcherList;
}else{
return null;
}
}
很抱歉 post 但如果有人有一些 hints/solution,将不胜感激
好的,感谢@jonSkeet,我做了一些更改,现在一切正常!这是我为帮助和我有同样问题的人所做的更改。
首先更改了我的 json 文件以反映我真正想要的(例如:真实的启动器列表):
{
"Launchers": [{
"Name": "Canon",
"Unlock": true,
"FireRate": 0,
"IsRotate": false,
"RotateSpeed": 0,
"NumberOfBullets": 0
},
{
"Name": "Rotator",
"Unlock": false,
"FireRate": 0,
"IsRotate": true,
"RotateSpeed": 0,
"NumberOfBullets": 0
},
{
"Name": "Back",
"Unlock": false,
"FireRate": 0,
"IsRotate": false,
"RotateSpeed": 0,
"NumberOfBullets": 0
}
]
}
然后我将我的映射更改为:
public class Launcher
{
public string Name { get; set; }
public bool Unlock { get; set; }
public int FireRate { get; set; }
public bool IsRotate { get; set; }
public int RotateSpeed { get; set; }
public int NumberOfBullets { get; set; }
}
public class Listlaunchers
{
public IList<Launcher> Launchers { get; set; }
}
最后是我的最后一段代码,可以按我的意愿使用它:
void Start()
{
Listlaunchers jsonList = ReadJson(Application.dataPath + "/Resources/BDD/Launchers.json");
if(jsonList != null){
foreach (var item in jsonList.Launchers)
{
Debug.Log("LAUNCHER JSON => " + item.Name + " => " + item.Unlock);
}
}
}
static Listlaunchers ReadJson(string pathToJsonFile){
if(File.Exists(pathToJsonFile)){
JObject objectJson = JObject.Parse(File.ReadAllText(pathToJsonFile));
Listlaunchers launcherList = JsonConvert.DeserializeObject<Listlaunchers>(objectJson.ToString());
return launcherList;
}else{
return null;
}
}
谢谢你帮助我!