在2048游戏中反序列化来自JSON的值数组会导致NullReferenceException

时间:2017-01-29 12:12:18

标签: c# json serialization windows-phone-8 deserialization

我正在为我的大学课程制作2048克隆。我有一个自定义类:

public class Field
{
    public int value;
    public bool stop;
}

这些字段的数组:

public Field[,] gameArray = new Field[4, 4];

这些是在自定义类中。 以下是我用于在项目页面cs文件中保存和加载此数组的方法:

    private async void saveAsync()
    {
        string jsonContents = JsonConvert.SerializeObject(currentGame.gameArray);
        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        StorageFile textFile = await localFolder.CreateFileAsync(saveFileName,
                                     CreationCollisionOption.ReplaceExisting);
        using (IRandomAccessStream textStream = await textFile.OpenAsync(FileAccessMode.ReadWrite))
        {
            using (DataWriter textWriter = new DataWriter(textStream))
            {
                textWriter.WriteString(jsonContents);
                await textWriter.StoreAsync();
            }
        }
    }
    private async void loadAsync()
    {
        StorageFolder localFolder = ApplicationData.Current.LocalFolder;
        StorageFile textFile = await localFolder.GetFileAsync(saveFileName);
        using (IRandomAccessStream textStream = await textFile.OpenReadAsync())
        {
            using (DataReader textReader = new DataReader(textStream))
            {
                if ((uint)textStream.Size != 0)
                {
                    uint textLength = (uint)textStream.Size;
                    await textReader.LoadAsync(textLength);
                    string jsonContents = textReader.ReadString(textLength);
                    currentGame.gameArray = JsonConvert.DeserializeObject<Field[,]>(jsonContents);
                }
                else currentGame.Reset();
            }
            update();
        }
    }

currentGame是自定义类的一个实例。重启();方法,好吧,重置所有字段,将它们的值设置为0. Update();方法用于检查玩家是否丢失(尚未实现),运行saveAsync();方法并用这样的线填充板(颜色方法只改变背景颜色):

txt10.Text = currentGame.gameArray[0, 0].value.ToString();
color(b10, currentGame.gameArray[0, 0].value);

,第一行是给我一个NullReferenceException。我可能搞砸了数组的序列化和反序列化,但我完全不知道它是什么以及如何解决这个问题,这是我对序列化的第一次尝试,我基本上是从互联网上复制它。我是否需要传递对loadAsync()的引用;方法

0 个答案:

没有答案