【发布时间】:2018-04-28 11:45:55
【问题描述】:
我正在尝试反序列化 Json 字符串。
这是我的代码:
[System.Serializable]
public class SharedWorlds
{
public int worldId { get; set; }
public System.DateTime uploaded { get; set; }
public string username { get; set; }
public string levelName { get; set; }
public string gameVersion { get; set; }
public string description { get; set; }
public string filename { get; set; }
public string screenshot1 { get; set; }
public string screenshot2 { get; set; }
public string userTag { get; set; }
public string userURL { get; set; }
public double price { get; set; }
public int nrDownload { get; set; }
public int votes { get; set; }
}
[System.Serializable]
public class Record {
public List<SharedWorlds> record;
}
try {
SDE3D _webService = new SDE3D();
result= _webService.GetMassiveWorldsList ();
var records = JsonUtility.FromJson<Record>(result);
}
catch(System.Exception ex) {
Debug.Log (ex.Message.ToString ());
}
这是我的有效 json(这里有两条记录,但我想每次发送许多记录)。
[
{
"worldId": 5,
"uploaded": "/Date(1524875719000)/",
"username": "quik",
"levelName": "Station",
"gameVersion": "1.0.1",
"description": "iwoeijksf",
"filename": "0000003.dat",
"screenshot1": "0000003a.png",
"screenshot2": "0000003b.png",
"userTag": "",
"userURL": "",
"price": 0,
"nrDownload": 5,
"votes": 5
},
{
"worldId": 4,
"uploaded": "/Date(1524875659000)/",
"username": "aksio",
"levelName": "Garage",
"gameVersion": "1.0.1",
"description": "Adlkld",
"filename": "0000003.dat",
"screenshot1": "0000003a.png",
"screenshot2": "0000003b.png",
"userTag": "",
"userURL": "",
"price": 0,
"nrDownload": 4,
"votes": 4
}
]
我收到错误:
“ArgumentException:JSON 必须表示一个对象类型。”
我很确定错误在此代码行中:
var records = JsonUtility.FromJson<Record>(result);
如何反序列化 json 对象数组?
谢谢
【问题讨论】:
-
我猜 JSON 没有
record字段,而您的Record类则没有。我认为,要使该行起作用,Record必须是List<SharedWorlds>而不是包含一个。 -
尝试使用
JsonUtility.FromJson<SharedWorlds[]>(result); -
为什么那个类叫
SharedWorlds,而不是SharedWorld?肯定每一个都只是一个世界吗? -
您的 json 与您尝试将其反序列化为的对象不匹配。还有其他问题,例如在该对象中使用属性:
{ get; set; }并尝试使用JsonUtility.FromJson反序列化 json 数组。这不起作用(不支持)。我正要回答,但我之前已经回答了涵盖您的问题的所有内容,并认为最好将其标记为重复。首先,使用this 从 json 数组生成数据。删除{ get; set; }然后使用JsonHelper.FromJson反序列化您的 json 数组。
标签: c# json web-services unity3d deserialization