Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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# 反序列化错误:InvalidCastException:无法从源类型强制转换为目标类型_C#_Unity3d_Deserialization - Fatal编程技术网

C# 反序列化错误:InvalidCastException:无法从源类型强制转换为目标类型

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

我有这个问题,我不知道如何解决它。。。我尝试了很多东西,但在网上找不到类似的帮助

注意:另一个场景使用脚本保存并使用相同的.dat文件,但不确定这是否是一个问题

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。