C# 反序列化错误:InvalidCastException:无法从源类型强制转换为目标类型
我有这个问题,我不知道如何解决它。。。我尝试了很多东西,但在网上找不到类似的帮助 注意:另一个场景使用脚本保存并使用相同的.dat文件,但不确定这是否是一个问题C# 反序列化错误:InvalidCastException:无法从源类型强制转换为目标类型,c#,unity3d,deserialization,C#,Unity3d,Deserialization,我有这个问题,我不知道如何解决它。。。我尝试了很多东西,但在网上找不到类似的帮助 注意:另一个场景使用脚本保存并使用相同的.dat文件,但不确定这是否是一个问题 public GameObject[] top10 = new GameObject[10]; [System.Serializable] public class ScoreEntry { public string name; public int score; } // Use this for initia
public GameObject[] top10 = new GameObject[10];
[System.Serializable]
public class ScoreEntry
{
public string name;
public int score;
}
// Use this for initialization
void Start () {
if (File.Exists(Application.persistentDataPath + "/hiscores.dat"))
{
BinaryFormatter b = new BinaryFormatter();
var f = File.Open(Application.persistentDataPath + "/hiscores.dat", FileMode.Open);
List<ScoreEntry> hiScores = (List<ScoreEntry>)b.Deserialize(f);
f.Close();
for (int i = 0; i == hiScores.Count; i++)
top10[i].GetComponent<TextMesh>().text += hiScores[i].name + " - " + hiScores[i].score;
}
}
// Update is called once per frame
void Update () {
}
public GameObject[]top10=新的GameObject[10];
[系统可序列化]
公开课记分
{
公共字符串名称;
公众智力得分;
}
//用于初始化
无效开始(){
if(文件.Exists(Application.persistentDataPath+“/hiscores.dat”))
{
BinaryFormatter b=新的BinaryFormatter();
var f=File.Open(Application.persistentDataPath+“/hiscores.dat”,FileMode.Open);
List hiScores=(List)b.反序列化(f);
f、 Close();
for(int i=0;i==hiScores.Count;i++)
top10[i].GetComponent().text+=hiScores[i]。名称+“-”+hiScores[i]。分数;
}
}
//每帧调用一次更新
无效更新(){
}
看起来您的ScoreEntry
类使用的是字段,而不是属性。我相信序列化程序/反序列化程序需要属性。试试这个:
[System.Serializable]
public class ScoreEntry
{
public string name {get;set;}
public int score {get;set;}
}
现在出现此错误:SerializationException:serializationStream支持查找,但其长度为0 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize(System.IO.Stream serializationStream,System.Runtime.Remoting.Messaging.HeaderHandler处理程序)(在/Users/builduser/buildslave/mono runtime和classlibs/build/mcs/class/corlib/System.runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:155)是否使用已序列化的旧文件?尝试使用此新类更改创建新的序列化文件(属性)。如果您试图反序列化旧版本,它可能没有正确序列化。该错误使文件看起来似乎不包含任何数据。此链接表明
我猜您没有在Save()函数中调用formatter.serialize。