我正在创建一个小系统让我看看Twitch使用他们的JSON API在我的聊天中。但是,当我成功获取信息时,我无法弄清楚如何正确解析它。
这是正在生成的字符串:
{
"_links": {},
"chatter_count": 1,
"chatters": {
"moderators": [
"teonnyn"
],
"staff": [],
"admins": [],
"global_mods": [],
"viewers": []
}
}
这是我创建的反序列化对象,但我不确定它是否完全正确:
public class users
{
public string[] links;
public int chatter_count;
public string[] moderators;
public string[] staff;
public string[] admins;
public string[] global_mods;
public string[] viewers;
}
我正在使用Newtonsoft.JSON来解析它 - 这是将字符串推送到“users”对象的正确方法吗?
答案 0 :(得分:4)
不,您拥有的C#类与JSON没有正确关联:
links
成员与JSON中的名称_links
不匹配。_links
被定义为一个数组,但应该是一个对象 - 它是JSON中的{}
,而不是[]
。chatters
,也应该是自定义类。从Visual Studio 2013 Update 2开始,您可以从JSON示例生成C#类。这是它为您的JSON生成的内容:
public class Rootobject
{
public _Links _links { get; set; }
public int chatter_count { get; set; }
public Chatters chatters { get; set; }
}
public class _Links
{
}
public class Chatters
{
public string[] moderators { get; set; }
public object[] staff { get; set; }
public object[] admins { get; set; }
public object[] global_mods { get; set; }
public object[] viewers { get; set; }
}
正如您所看到的,它会将moderators
正确地映射到string[]
,但会有点混淆,其余部分会使用object[]
,因为该片段包含数据以使其基于输入。
如果您可以获得包含更多数据的JSON示例 - 理想情况下,每个字段都存在且具有代表性数据 - 您将获得最佳映射。
此外,您应该将Rootobject
更改为您自己的班级名称。 User
或TwitchUser
应该这样做。
一旦你有一个与你的JSON正确对应的类,使用JSON.NET解析它非常简单:
Rootobject yourData = JsonConvert.DeserializeObject<Rootobject>(inputJsonString);
你已经完成了。