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