首页 > 解决方案 > 我将如何填充 UserL 列表?

问题描述

我正在寻找填充UserL列表,但到目前为止我遇到了一些主要问题。我的小脑袋在谷歌上找不到任何解决方案。

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
        }
    ]
}

标签: c#jsonjson.net

解决方案


您现在设置的方式是..您需要创建一个实例,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类。这将要求您重命名属性UserLUserArr匹配 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");

推荐阅读