我有以下代码
string downloadString = client.DownloadString(serviceurl);
List<Player> myDeserializedObjList = (List<Player>)JsonConvert.DeserializeObject(downloadString, typeof(List<Player>));
调试代码时downloadString
具有以下值
"{\"GetPlayerInfoResult\":\"[{\\\"PlayerId\\\":1,\\\"FirstName\\\":\\\"Ryan\\\",\\\"LastName\\\":\\\"Richard\\\",\\\"Age\\\":30},{\\\"PlayerId\\\":2,\\\"FirstName\\\":\\\"Petrus\\\",\\\"LastName\\\":\\\"Prinsloo\\\",\\\"Age\\\":20}]\"}"
在desierialize行上我得到以下错误
{“无法将当前JSON对象(例如{\”name \“:\”value \“})反序列化为类型'System.Collections.Generic.List`1 [WFAPlayers.Player]',因为类型需要要正确反序列化的JSON数组(例如[1,2,3])。\ r \ n要修复此错误要么将JSON更改为JSON数组(例如[1,2,3]),要么更改反序列化类型以便它是一个普通的.NET类型(例如,不是像整数这样的基本类型,不是类似于数组或List的集合类型),可以从JSON对象反序列化.JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。\ r \ nPath'GetPlayerInfoResult',第1行,第23位。“}
任何想法如何解决这个问题。
由于
答案 0 :(得分:0)
您可以尝试使用此
List<Player> myDeserializedObjList =JsonConvert.DeserializeObject <IEnumerable<Player>>(downloadString).ToList();
有些人发现使用IEnumerable
作为反序列化的类型可以提供帮助。或者,您可以尝试直接反序列化到列表中,如此
List<Player> myDeserializedObjList =JsonConvert.DeserializeObject <List<Player>>(downloadString);
编辑:
看一下字符串,似乎你在JSON数组周围有一个容器对象,所以你需要一个可以将数据反序列化的字符串。
public class Data
{
public List<PLayer> GetPlayerInfoResult { get; set; }
}
然后你会打电话给
List<Player> myDeserializedObjList =JsonConvert.DeserializeObject <Data>(downloadString).GetPlayerInfoResult;
答案 1 :(得分:0)
可以有两种方法来处理这种JSON字符串。 JSON字符串的问题是它看起来像这个
{
"GetPlayerInfoResult": "[{\"PlayerId\":1,\"FirstName\":\"Ryan\",\"LastName\":\"Richard\",\"Age\":30},{\"PlayerId\":2,\"FirstName\":\"Petrus\",\"LastName\":\"Prinsloo\",\"Age\":20}]"
}
它应该看起来像
{
"GetPlayerInfoResult": [
{
"PlayerId": 1,
"FirstName": "Ryan",
"LastName": "Richard",
"Age": 30
},
{
"PlayerId": 2,
"FirstName": "Petrus",
"LastName": "Prinsloo",
"Age": 20
}
]
}
所以这似乎是将GetPlayerInfoResult
作为一个字符串,所以我们可以纠正JSON字符串并将其解析为
string jsonstr = File.ReadAllText(YourJSONFile);
//remove the \ forward slash from the string
jsonstr = jsonstr.Replace("\\", "");
//replace the "[ to [
jsonstr = jsonstr.Replace("\"[", "[");
//replace the ]" to ]
jsonstr = jsonstr.Replace("]\"", "]");
//now deseralize it normally like any other JSON String
var ser = JsonConvert.DeserializeObject<GetPlayerInfo>(jsonstr);
类结构看起来像这样
public class GetPlayerInfoResult
{
public int PlayerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
public class GetPlayerInfo
{
public List<GetPlayerInfoResult> GetPlayerInfoResult { get; set; }
}
我们也可以进行双重去除。我们不应该更改JSON字符串中的任何内容,不能替换任何内容并保持原样。
public class GetPlayerInfo
{
public string GetPlayerInfoResult { get; set; }
}
public class GetPlayerInfo
{
public int PlayerId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
反序列化就像
var ser = JsonConvert.DeserializeObject<GetPlayerInfo>(jsonstr);
var ser1 = JsonConvert.DeserializeObject<List<PlayerInfoResult>>(ser.GetPlayerInfoResult);