C# JSONTypeCompressionException:只有具有默认构造函数的对象才能反序列化

C# JSONTypeCompressionException:只有具有默认构造函数的对象才能反序列化,c#,mono,unity3d,C#,Mono,Unity3d,我正在使用C#(通过Unity3D中的Mono)来序列化一些数据,但是当我尝试反序列化数据时,我得到了:“JSONTypeCompressionException:只有具有默认构造函数的对象才能反序列化。(级别[])” 我已经尝试向序列化类添加默认构造函数,但仍然出现错误。Fwiw,我在一个类似的线程中尝试了不同的建议: 这是我的密码: //C# using System; using UnityEngine; using System.Collections; using JsonFx.Js

我正在使用C#(通过Unity3D中的Mono)来序列化一些数据,但是当我尝试反序列化数据时,我得到了:“JSONTypeCompressionException:只有具有默认构造函数的对象才能反序列化。(级别[])”

我已经尝试向序列化类添加默认构造函数,但仍然出现错误。Fwiw,我在一个类似的线程中尝试了不同的建议:

这是我的密码:

//C#
using System;
using UnityEngine;
using System.Collections;
using JsonFx.Json;
using System.IO;

public class LoadLevel : MonoBehaviour {


string _levelFile = "levels.json"; 
Level[] _levels; 

void Start () {

    if (!File.Exists (_levelFile)){

        // write an example entry so we have somethng to read
        StreamWriter sw = File.CreateText(_levelFile);

        Level firstLevel = new Level();
        firstLevel.LevelName = "First Level";               
        firstLevel.Id = Guid.NewGuid().ToString();


        sw.Write(JsonFx.Json.JsonWriter.Serialize(firstLevel)); 
        sw.Close();

    }


    // Load our levels
    if(File.Exists(_levelFile)){

        StreamReader sr = File.OpenText(_levelFile);

        _levels = JsonReader.Deserialize<Level[]>(sr.ReadToEnd());

    }

}
}

有什么想法吗?我尝试过使用和不使用Level()构造函数。

我认为JSON流实际上需要包含一个数组才能工作-它不能只是一个元素,因为您要求反序列化数组。

我认为您需要Serializable属性

[System.Serializable]
public class Level 
 {
     public string Id;
     public string LevelName;
 }
然后,您的json级别数组必须如下所示:

{
  [
    { 
      "Id" : "1",
      "LevelName" : "first level"
    },
    { 
      "Id" : "2",
      "LevelName" : "second level"
    }
  ]
}

这并不完全正确,但你让我走上了正确的道路……我的JSON不可靠。我通过jsonlint.com运行了它,并进行了相应的调整。
{
  [
    { 
      "Id" : "1",
      "LevelName" : "first level"
    },
    { 
      "Id" : "2",
      "LevelName" : "second level"
    }
  ]
}