我有一个系统可以保存JSON:
public static void saveMap()
{
string toSave = Json.Encode(Map.Universe);
using (StreamWriter sw = new StreamWriter(dataDirectory + "Map.json"))
{
sw.Write(toSave);
}
}
目前没有以我想要的格式保存。它目前像这样保存:
{
"Planets": [{
"Name": "GY-96547",
"Location": {
"x": 0,
"y": 0,
"type": "P",
"galaxyString": "FT-22419"
}
}],
"Station": {
"Name": "LT-15743",
"Location": {
"x": 0,
"y": 0,
"type": "S",
"galaxyString": "FT-22419"
}
},
"Name": "FT-22419",
"Location": {
"x": 0,
"y": 0,
"type": "G"
}}
我想以另一种方式保存,我的地图加载功能可以理解。我将能够轻松实现解决方案,我只需要了解它。
Web.Helpers中是否有办法可以使用我需要的格式保存JSON,基本上 - 不保存文件“颠倒”,还有一种方法可以将其保存在列表中。
额外的信息,以防万一你想知道我需要保存的格式(并且当前加载它):
{
"Galaxy": {
"Name": "FT-22419",
"Location": {
"x": 0,
"y": 0,
"type": "G"
},
"Station": {
"Name": "LT-15743",
"Location": {
"x": 0,
"y": 0,
"type": "S",
"galaxyString": "FT-22419"
}
},
"Planets": [
{
"Name": "GY-96547",
"Location": {
"x": 0,
"y": 0,
"type": "P",
"galaxyString": "FT-22419"
}
}
]}}
要求的定义:
[Serializable]
public class Galaxy
{
public string Name { get; set; }
public List<Planet> Planets = new List<Planet>();
public Station Station;
public Location Location { get; set; }
public Galaxy() { }
public static string ListContents(Galaxy g)
{
int index = Map.Universe.IndexOf(g);
string ps = "Planets:";
string st = "|Station:" + Map.Universe[index].Station.Name;
foreach (Planet p in Map.Universe[index].Planets)
{
if (Map.Universe[index].Planets.IndexOf(p) != Map.Universe[index].Planets.Count)
{
ps += p.Name + ", ";
}
else
{
ps += p.Name;
}
}
return (ps + st);
}
}
地图
[Serializable]
public class Map
{
public static List<Galaxy> Universe = new List<Galaxy>(); }
行星
[Serializable]
public class Planet
{
public string Name { get; set; }
public Location Location { get; set; }
}
和Station与Planet相同,只是重命名。
答案 0 :(得分:0)
你不能(也不应该)依赖JSON dictonary中元素的顺序。根据规范(http://www.json.org/),它们是无序的。对于订购,您需要将数据或类似物放入。
对于分组,您应该在序列化之前将要组合在一起的元素添加到列表中。