将JSON文件读入对象C#

时间:2016-04-27 16:54:10

标签: c# json json.net

我有一个游戏玩家的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;}
}

PlayerList类

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);

    }

据说PlayerList对象不为null,但List为空。如果有人能告诉我如何将JSON转换为PlayerList对象,然后从那里获取玩家的变量,比如UserName,我将非常感激!

3 个答案:

答案 0 :(得分:3)

Visual Studio有一个很好的解析XML / JSON的功能...即,如果将XML或JSON复制到剪贴板,则可以使用Edit -> Paste Special -> Paste JSON As Classes命令让VS自动生成有效的模型类。 / p>

如果你的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的事情。我不知道它是不是一个好的图书馆,but there ARE .NET classes which are capable of deserializing JSON。链接的问题提供了一种方法。另一个是使用DataContractJsonSerializer,虽然我认为模型类需要添加[DataContract][DataMember]属性才能使用它。

答案 1 :(得分:1)

原因是在json doc中,该属性称为“Users”,在您的代码中,您将其称为“pList”。

有两种解决方案:

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

  2. 在属性上添加JsonProperty属性以设置其名称,如下所示:

    类播放器列表
    {
        [JsonProperty(PropertyName =“Users”)]
        public List pList {get;组; }
    }

答案 2 :(得分:0)

我能够通过以下链接跟踪问题中所述的内容来实现这一目标:

How to deserialize an JObject to .NET object

这是我的代码:

        var playerList = JsonConvert.DeserializeObject(json);
        JObject jObject = ((JObject)playerList);
        PlayerList users = jObject.ToObject<PlayerList>();

我还将pList重命名为PlayerList类上的用户。

相关问题