我将如何填充UserL列表?

时间:2019-08-11 19:19:44

标签: c# json json.net

我希望填充UserL列表,但到目前为止,我遇到了一些主要问题。我的大脑很小,无法在Google上找到任何解决方案。

public partial class RootObject
{
    public List<User> UserL = new List<User>();
}

public partial class User
{
    public string Username { get; set; }
    public double UserID { get; set; }
    public long WarnCount { get; set; }
    public long Level { get; set; }
    public long XP { get; set; }
}

public partial class RootObject
{
    public static List<User> FromJson(string json) => JsonConvert.DeserializeObject<List<User>>(File.ReadAllText(json), Converter.Settings);
}

public static class Serialize
{
    public static string ToJson(this RootObject self) => JsonConvert.SerializeObject(self, Converter.Settings);
}

这是我要反序列化的JSON:

{
    "UserArr": [
        {
            "Username": "User2",
            "UserID": 307618173073489920,
            "WarnCount": 0,
            "Level": 0,
            "XP": 0
        },
        {
            "UserName": "User1",
            "UserID": 385453321999089664,
            "WarnCount": 0,
            "Level": 0,
            "XP": 0
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

现在设置事物的方式是..您需要创建RootObject的实例,然后使用方法FromJson来设置值。要么需要在初始化之后,要么在RootObject的构造函数中。

RootObject root = new RootObject
{
    UserL = RootObject.FromJson("json1.json")
};

您遇到的错误是由于您要反序列化的json格式所致。因为您是直接反序列化为列表,而不是包含列表的类,所以最外面的部分需要是一个[]数组。

以您发布的json为例,您需要删除UserArr部分并进行更改

{  
   "UserArr":[  
      {  
         "Username":"User2",
         "UserID":307618173073489920,
         "WarnCount":0,
         "Level":0,
         "XP":0
      },
      {  
         "UserName":"User1",
         "UserID":385453321999089664,
         "WarnCount":0,
         "Level":0,
         "XP":0
      }
   ]
}

进入

[  
   {  
      "Username":"User2",
      "UserID":307618173073489920,
      "WarnCount":0,
      "Level":0,
      "XP":0
   },
   {  
      "UserName":"User1",
      "UserID":385453321999089664,
      "WarnCount":0,
      "Level":0,
      "XP":0
   }
]

如果json不可修改,则可以更改反序列化的方式。不是直接反序列化到列表,而是反序列化到RootObject类。这将要求您将属性UserL重命名为UserArr以匹配json例如

public class RootObject
{
    public List<User> UserArr = new List<User>();
}

RootObject root = JsonConvert.DeserializeObject<RootObject>(File.ReadAllText("json.json"));

并保持您的FromJson方法

public class RootObject
{
    public List<User> UserArr = new List<User>();
    public static RootObject FromJson(string json) => JsonConvert.DeserializeObject<RootObject>(File.ReadAllText(json));
}

RootObject root = RootObject.FromJson("json.json");