Как преобразовать значение словаря в список<MyClass> в Unity
Я сохранил свой класс с использованием библиотек JsonFx в файл "Saved.json" и хочу проанализировать файл json для загрузки сохраненных данных класса
Но я не могу найти способ изменить словарь на мой тип класса. Не могли бы вы сказать мне, как это работает? Я пытался, как это..
List<object> readStageList = new List<object>();
readStageList = (List<object>)readJson["data"];
Вот мой код
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using JsonFx.Json;
using System.IO;
using System;
using System.Linq;
public class Data : MonoBehaviour {
public class Json
{
public static string Write(Dictionary<string, object> dic){
return JsonWriter.Serialize(dic);
}
public static Dictionary<string, object> Read(string json){
return JsonReader.Deserialize<Dictionary<string, object>>(json);
}
}
public class StageData
{
public int highscore;
public StageData(int highscore)
{
this.highscore = highscore;
}
}
void Start () {
Dictionary<string, object> dicJson = new Dictionary<string, object>();
StageData stageOne = new StageData(10);
StageData stageTwo = new StageData(20);
List<StageData> stageList = new List<StageData>();
stageList.Add(stageOne);
stageList.Add(stageTwo);
dicJson.Add("data",stageList);
string strJson = Json.Write(dicJson);
string path = pathForDocumentsFile("Saved.json");
File.WriteAllText(path, strJson);
Dictionary<string, object> readJsonDic = new Dictionary<string, object>();
// how can I change this readJsonDic to List<StageData> ..?
}
}
2 ответа
Не знаком с jsonfx и с тем, можно ли разрешить его непосредственное чтение в список (что, вероятно, будет предпочтительным способом), но очень просто получить значения словаря в списке:
Dictionary<string, object> dict = new Dictionary<string, object>()
{
["firstKey"] = "some string as value",
["secondKey"] = 42
};
List<object> objects = dict.Values.ToList(); //will contain the string "some string as value" and the int 42
Я понимаю, что это устарело, но для полноты:
.ToList()
работает нормально, но следует отметить, что для этого требуются:
using System.Linq;