我有一个游戏的JSON玩家列表。我需要程序能够读取 JSON 文件并给我玩家列表。然后,我可以使用此玩家列表来获取每个玩家的名称以及他们关注的人。
{
"Version": "1",
"Users": [
{
"UserName": "CoolDude",
"Following": [ "SniperElitez", "IamAwesome" ]
},
{
"UserName": "GamerChick",
"Following": [ "IamAwesome", "NoWayBro", "WowWhoMe", "SniperElitez", "SurfingIsFun", "NowUTry" ]
},
{
"UserName": "SurfingIsFun",
"Following": [ "WowWhoMe" ]
},
{
"UserName": "IamAwesome",
"Following": [ "GamerChick", "NoWayBro" ]
},
{
"UserName": "NowUTry",
"Following": [ "GamerChick", "SniperElitez" ]
},
{
"UserName": "SniperElitez",
"Following": [ "SurfingIsFun", "IamAwesome" ]
},
{
"UserName": "WowWhoMe",
"Following": [ "NoWayBro", "GamerChick", "SniperElitez" ]
},
{
"UserName": "NoWayBro",
"Following": [ "GamerChick", "IamAwesome", "SniperElitez" ]
}
]
}
这是我目前尝试使用的代码玩家类
class Player
{
public string UserName { get; set;}
public List<string> Following { get; set;}
}
玩家列表类
class PlayerList
{
public List<Player> pList { get; set; }
}
主要
{
string json = File.ReadAllText("friends.json");
// this gives me a playerList object
PlayerList playerList = JsonConvert.DeserializeObject<PlayerList>(json);
}
假设玩家列表对象不为空,但列表为空。如果有人能告诉我如何将 JSON 转换为 PlayerList 对象,然后从那里获取玩家的变量,如用户名,我将不胜感激!
Visual Studio有一个很好的功能来解析XML/JSON...也就是说,如果将 XML 或 JSON 复制到剪贴板,则可以使用 Edit -> Paste Special -> Paste JSON As Classes
命令并让 VS 自动生成有效的模型类。
如果是您的 JSON,这是我的 VS 生成的输出:
public class Rootobject
{
public string Version { get; set; }
public User[] Users { get; set; }
}
public class User
{
public string UserName { get; set; }
public string[] Following { get; set; }
}
试试看。
另外,您正在使用JsonConvert
,这似乎是Newtonsoft的东西。我不知道它是否是一个很好的库,但是有一些.NET类能够反序列化JSON。链接的问题提供了一种方法。另一种是使用DataContractJsonSerializer
,尽管我认为模型类需要向其添加[DataContract]
和[DataMember]
属性才能使用它。
原因是在 json 文档中,该属性称为"用户",在您的代码中,您将其称为"pList"。
对此有两种解决方案:
-
将 PlayerList.pList 重命名为 PlayerList.Users
-
在属性上添加 JsonProperty 属性以设置其名称,如下所示:
类玩家列表
{ [JsonProperty(PropertyName = "Users")]
public list pList { get; set; }
}
我能够按照以下链接中的问题中所述的内容来使其工作:
如何将 JObject 反序列化为 .NET 对象
这是我的代码:
var playerList = JsonConvert.DeserializeObject(json);
JObject jObject = ((JObject)playerList);
PlayerList users = jObject.ToObject<PlayerList>();
我还将 pList 重命名为 PlayerList 类上的用户。