2016-09-27 13 views
0

我节省了JSON作为这样一个系统:C#保存JSON与所需使用的格式Web.Helpers

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是一样的,只是改名了。

+0

什么是保存和如何确定的类型被序列化 - 它不只是格式化的东西。 – Plutonix

+0

因此,如何将我的事实加我想 '{ “清单”:[{ “银河”:{' 添加吗? –

+0

你能和我们分享你的班级定义吗?这可能是问题。 –

回答

0

您不能(也不应该)依赖JSON中的元素顺序。根据规范(http://www.json.org/),他们是无序的。为了排序,你需要把东西放入一个数组或类似的东西。

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

+0

在JSON文件中排序并不重要,重要的是我希望“星系”位于JSON文件中的数组中。我的代码中的星系有一个名字,一个行星列表,单站和一个位置。我的代码中的“宇宙”是一个“星系”列表。一切都在列表中,我只需要知道如何将它保存在一个更有组织的列表中,至少有一个标题。 –