【发布时间】:2015-06-24 20:26:57
【问题描述】:
我创建了一个反序列化类this JSON
public class Self
{
public string href { get; set; }
}
public class Team
{
public string href { get; set; }
}
public class Links
{
public Self _self { get; set; }
public Team team { get; set; }
}
public class Player
{
public int id { get; set; }
public string name { get; set; }
public string position { get; set; }
public int jerseyNumber { get; set; }
public string dateOfBirth { get; set; }
public string nationality { get; set; }
public string contractUntil { get; set; }
public string marketValue { get; set; }
}
public class RootObject
{
public Links _links { get; set; }
public int count { get; set; }
public List<Player> players { get; set; }
}
public struct Player_Struct
{
public string id;
public string name;
public string position;
public int jerseyNumber;
public string dateOfBirth;
public string nationality;
public string contractUntil;
public string marketValue;
}
所以我做了一个函数来创建一个 HttpRequest 和相关对象:
string requestUrl = teams.link_teams;
string responseText = parser.Request(requestUrl);
var obj = JsonConvert.DeserializeObject<Players.RootObject>(responseText);
现在的问题是编译器返回这个异常:
Newtonsoft.Json.dll 中未处理的异常“Newtonsoft.Json.JsonSerializationException”
后天信息:无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“SF_DebugProject.API.Players+Links”,因为该类型需要 JSON 对象(例如 {"name":"value" }) 正确反序列化。
要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化的列表。也可以将 JsonArrayAttribute 添加到类型中以强制它从 JSON 数组中反序列化。
路径“_links”,第 1 行,位置 11。
因此,通过修复提示,我尝试修复错误,将对象更改为:
List<Players.RootObject> obj = JsonConvert.DeserializeObject<List<Players.RootObject>>(responseText);
但是通过这种方式,当我执行 foreach 时,我看不到 rootobject 的任何属性。我做错了什么?
【问题讨论】:
-
json 在哪里?消息说输入形状与目标类型不匹配。反序列化不能改变数据的形状。如果您的输入包含没有其他数据的玩家数组,则不能强制它成为
RootObject -
json 在这里:api.football-data.org/alpha/teams/19/players 无论如何,有了这个对象我可以看到 RootObject 的参数: var obj = JsonConvert.DeserializeObject
(responseText);但由于奇怪的原因返回了异常。