将 JSON 文件读入对象 C#



我有一个游戏的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"。

对此有两种解决方案:

  1. 将 PlayerList.pList 重命名为 PlayerList.Users

  2. 在属性上添加 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 类上的用户。

相关内容

  • 没有找到相关文章

最新更新