C#使用Web.Helpers以所需的格式保存JSON

时间:2016-09-27 17:01:13

标签: c# json

我有一个系统可以保存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相同,只是重命名。

1 个答案:

答案 0 :(得分:0)

你不能(也不应该)依赖JSON dictonary中元素的顺序。根据规范(http://www.json.org/),它们是无序的。对于订购,您需要将数据或类似物放入。

对于分组,您应该在序列化之前将要组合在一起的元素添加到列表中。