gpt4 book ai didi

c# - 将对象转换为 C# 类

转载 作者:行者123 更新时间:2023-11-30 16:45:24 28 4
gpt4 key购买 nike

尝试将 .dat 文件转换为它自己的类

  level0 = (Level0) LoadObjInBinary(level0, "Level" + levelNumber);

public static object LoadObjInBinary(object myClass, string fileName) {
fileName += ".dat";
if (File.Exists(FileLocation + fileName)) {
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(FileLocation + fileName, FileMode.Open);
myClass = bf.Deserialize(file);
file.Close();
return myClass;
} else {
return null;
}
}


Level() class

[Serializable]
public class Level0 { //Using this class to create Level.dat binary file

static int level = 1;
static int moves = 15;
static int seconds;
static int minScoreForOneStar = 1000;
static int minScoreForTwoStars = 1500;
static int minScoreForThreeStars = 2000;

static TargetObj[] targetObjs = {new TargetObj(Targets.Black, 10), new TargetObj(Targets.Freezer, 1), new TargetObj(Targets.Anchor, 2)};

static Color[] colors = {Constants.grey, Constants.green, Constants.pink, Constants.brown, Constants.purple, Constants.lightBlue};

static Cell[,] levelDesign;

//the rest is Properties of Fields

}

问题:LoadObjInBinary 返回 null。文件路径正确,类也匹配,但不知道为什么“(Level0)对象”不起作用...

谢谢

最佳答案

感谢您提供 Level0 类(class)。

问题是 static 字段永远不会被序列化,因为它们不属于您实例化的对象的实例,它们是全局的。

因为我假设您需要它们是静态的,所以它们可以从您的应用程序的所有部分访问,快速的解决方法是创建另一个具有非静态成员的类,然后对其进行序列化-反序列化,并将其分配给值到 Level0 的全局静态实例(无论你在哪里使用它)。

[Serializable]
class Level0Data
{
int level = 1;
int moves = 15;
int seconds;
int minScoreForOneStar = 1000;
...
}

然后在序列化和反序列化之后,您可以执行以下操作。

 Level0Data deserializedObject = (Level0Data) LoadObjInBinary(..);
Level0.level = deserializedObject.level;
Level0.moves = deserializedObject.moves;

因为您必须确保 Level0.level、moves 和所有其他成员都是公开的,或者至少公开可用于以其他方式进行修改。

另外你必须确保

class TargetObj{}
class Cell{}

也被标记为可序列化,否则它们不会写入文件,也不会写入任何关于它们的反序列化信息。

编辑

在这里你可以找到Unity默认支持的所有可序列化类型:

Unity SerializeField

关于c# - 将对象转换为 C# 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186084/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com