2

我有一个序列化问题。我希望保存和加载一个简单的 3d 数据块。我有一个包含尺寸(宽度、高度和长度)以及一个 3D 整数数组的类。JSON 非常高兴地将类转换为字符串以供我保存,但是在再次转换回来时它的播放效果并不好。

数据类:

Public class cClusterData {
public int mWidth;
public int mHeight;
public int mLength;
public int[,,] mCellType;

public cClusterData()
{
    mCellType = new int[32,32,32];
}
}

保存它的例程:

    public void SaveCluster()
{
    cClusterData lData = new cClusterData();
    lData.mWidth = mWidth;
    lData.mHeight = mHeight;
    lData.mLength = mLength;
    for (int lX = 0; lX < mWidth; lX++)
    {
        for (int lY = 0; lY < mHeight; lY++)
        {
            for (int lZ = 0; lZ < mLength; lZ++)
            {
                lData.mCellType[lX,lY,lZ] = (int)mCell[lX,lY,lZ].mType;
            }
        }
    }

    string lDataString = LitJson.JsonMapper.ToJson(lData);
    cFileUtils.WriteStringToFile("TestCluster", lDataString);
    Debug.Log("Done saving");
}

以及再次加载它的函数:

    public void LoadCluster()
{
    string lDataString = cFileUtils.LoadStringFromFile("TestCluster");
    cClusterData lData = new cClusterData();
    lData = LitJson.JsonMapper.ToObject<cClusterData>(lDataString);
    Debug.Log("Loaded header " + lDataString);
    // convert cluster data to actual cluster
    mWidth = lData.mWidth;
    mHeight = lData.mHeight;
    mLength = lData.mLength;

    CreateBlankCluster();
    for (int lX = 0; lX < mWidth; lX++)
    {
        for (int lY = 0; lY < mHeight; lY++)
        {
            for (int lZ = 0; lZ < mLength; lZ++)
            {
                mCell[lX,lY,lZ].SetType((cCell.eCellType)lData.mCellType[lX,lY,lZ]);
            }
        }
    }
}

一切都很好,直到它尝试访问 lData.mCellType ,此时它抛出了 NullReferenceException :

NullReferenceException:对象引用未设置为对象的实例(包装器托管到托管)对象:ElementAddr(object,int,int,int)

我的猜测将涉及在构造函数中设置数组的方式,而我只是在某处遗漏了一行。但我无法解决。加油,互联网!

4

1 回答 1

1

我没有在您的代码片段中看到,但是您是否[System.Serializable]在此类之前添加了?都是从同一个问题开始的,一个自定义类,所有的解决方案似乎都是通过将它添加到类的顶部来找到的。

于 2012-12-02T07:10:07.277 回答