字符串列表不反序列化,而自定义列表是

时间:2014-05-18 18:23:07

标签: c# json.net

我有一个Scene对象,其中包含一个字符串列表,即场景中使用的图像文件的名称。我正在使用Json.NET对其进行序列化和反序列化。我需要在我的GameObjects列表之前创建这个列表,它在文件名列表中查找它们的纹理。

class Scene : Nameable
{
    List<String> sceneContent = new List<string>();
    List<GameObject> gameObjects = new List<GameObject>();

    public Scene(String name)
    {
        this.Name = name;
    }

    [JsonProperty(Order = 1)]
    public List<String> SceneContent
    {
        get { return sceneContent; }
        set { sceneContent = value; }
    }

    [JsonProperty(Order = 2)]
    public List<GameObject> GameObjects
    {
        get { return gameObjects; }
        set { gameObjects = value; }
    }

    public void CreateNullBodys(World world)
    {
        foreach (GameObject obj in gameObjects)
        {
            BodyFactory.CreateRectangle(world, obj.Width, obj.Height, 1f, obj.Position, obj.Name);
            obj.Body.BodyType = obj.Type;
            obj.Body.CollisionCategories = Category.All;
        }
    }
}

正如您所看到的,我已经尝试将JsonProperty Order添加到此类中,希望能够先将它序列化。但是,这似乎不起作用,即使在反序列化完成后,此列表也未填充。我的序列化输出可以在这里找到:http://pastebin.com/A5qjNhhV。如果有人有任何关于为什么这个列表没有被反序列化的想法,而游戏对象的列表是,请帮助我理解发生了什么!

编辑:序列化代码:

public Scene LoadScene(String sceneName)
    {
        StreamReader reader = new StreamReader(Environment.CurrentDirectory + "/game/scenes/" + sceneName + ".scene");
        String jsonScene = reader.ReadToEnd();
        Scene scene = JsonConvert.DeserializeObject<Scene>(jsonScene);
        reader.Close();
        return scene;
    }

    public void SaveScene(Scene scene)
    {
        String jsonScene = JsonConvert.SerializeObject(scene, Formatting.Indented);
        Console.Out.WriteLine(jsonScene);
        StreamWriter file = new StreamWriter(Environment.CurrentDirectory + "/game/scenes/" + scene.Name + ".scene");
        file.Write(jsonScene);
        file.Close();
    }

1 个答案:

答案 0 :(得分:0)

我还没有解决有关反序列化排序的问题。但是我已经通过重新遍历每个游戏对象并更新了由于空列表而未在初始构造函数中设置的所有值来解决了这个特定问题。

值得注意的是,列表确实已填充,但仅在游戏对象列表之后才会填充。