Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在同一文件中保存不同的类_C#_Json_Unity3d - Fatal编程技术网

C# 如何在同一文件中保存不同的类

C# 如何在同一文件中保存不同的类,c#,json,unity3d,C#,Json,Unity3d,所以我为Unity下载了一个名为JSON.NET for Unity的资产,我让它工作了,但我有一个问题 我有不同的类和变量,我想存储它们,问题是我不知道如何将它们保存在同一个文件中。对于我想保存的每件事,我都有不同的方法,但我不知道如何用相同的方法保存,或者让它写在同一个文件中 这是一个例子:在这个方法中,我保存名为World的类,并从文件中获取它。我还有其他类似的方法,它要求不同的东西,一个列表,一个变量 public void SaveWorld(World worldToSave

所以我为Unity下载了一个名为JSON.NET for Unity的资产,我让它工作了,但我有一个问题

我有不同的类和变量,我想存储它们,问题是我不知道如何将它们保存在同一个文件中。对于我想保存的每件事,我都有不同的方法,但我不知道如何用相同的方法保存,或者让它写在同一个文件中

这是一个例子:在这个方法中,我保存名为World的类,并从文件中获取它。我还有其他类似的方法,它要求不同的东西,一个列表,一个变量

    public void SaveWorld(World worldToSave)
{
    SaveSystem.Init();
    string json = JsonConvert.SerializeObject(worldToSave, Formatting.Indented, new JsonSerializerSettings
    {
        TypeNameHandling = TypeNameHandling.Auto,
        PreserveReferencesHandling = PreserveReferencesHandling.Objects
    });
    File.WriteAllText(SaveSystem.SAVE_FOLDER + "/Save.json", json);
}
public World LoadWorld()
{
    World saveWorld = null;
    if (File.Exists(SaveSystem.SAVE_FOLDER + "/Save.json"))
    {
        string saveString = File.ReadAllText(SaveSystem.SAVE_FOLDER + "/Save.json");
        saveWorld = JsonConvert.DeserializeObject<World>(saveString, new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.Auto,
            ReferenceLoopHandling = ReferenceLoopHandling.Serialize

        });
    }
    return saveWorld;
}
其中saveLoadSystem是包含所有方法的脚本

多谢各位

编辑:使用Hacettepe Hesabı答案

我可以像他说的那样正确地保存,保存一个只包含一个名为numData的int的类和另一个包含int列表的脚本,我得到如下结果:

{
  "$id": "1",
  "numData": 2
}[
  0,
  1
]
问题是,当我加载时,会出现以下错误:

JsonReaderException:在阅读完JSON内容:[.Path,第4行,位置1后遇到其他文本

使用下一种方法加载Im:

    public DATA LoadData()
{
    DATA saveData = null;
    if (File.Exists(SaveSystem.SAVE_FOLDER + "/Save.json"))
    {
        string saveString = File.ReadAllText(SaveSystem.SAVE_FOLDER + "/Save.json");
        saveData = JsonConvert.DeserializeObject<DATA>(saveString, new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.Auto,
            ReferenceLoopHandling = ReferenceLoopHandling.Serialize

        });
    }
    return saveData;
}

要将它们全部保存到同一个文件中,您可以将三个实例放在同一个类中,然后保存该类。

是的,我考虑过,但这将是一个非常大的类,我希望每个东西都有自己的位置,例如,将世界与价格混合在一起,我会认为它是一种集合类,只包含n您可以创建并传递到json函数中的三个不同类的三个实例。当然,您必须调整保存/加载代码,但它仍然允许您保留原来的三个类,并且只使用这个新类保存/加载json允许嵌套您可以将json对象放入另一个json函数中我不知道您的特定JSON库,所以我不能提供完整的答案,但您要做的是将所有3个具有命名键的对象添加到单个JSON对象中,并将其序列化到文件中。
    public DATA LoadData()
{
    DATA saveData = null;
    if (File.Exists(SaveSystem.SAVE_FOLDER + "/Save.json"))
    {
        string saveString = File.ReadAllText(SaveSystem.SAVE_FOLDER + "/Save.json");
        saveData = JsonConvert.DeserializeObject<DATA>(saveString, new JsonSerializerSettings
        {
            TypeNameHandling = TypeNameHandling.Auto,
            ReferenceLoopHandling = ReferenceLoopHandling.Serialize

        });
    }
    return saveData;
}