c# - 我将如何填充 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
}
]
}
解决方案
您现在设置的方式是..您需要创建一个实例,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");
推荐阅读
- c++ - 如何从 CMakeLists.txt 为 mingw32-make 添加命令行选项?
- c++ - 我在 C++ 中用 0 初始化了一个二维数组,但它正在用一些任意数字初始化某个元素,为什么会这样?
- mongodb - mongorestore 0 个文档已成功恢复。0 个文档无法恢复
- python - 使用 for 循环对每个键取多个值
- html - xslt 2.0 html 将值插入布局
- ios - 如何创建自定义 UTType 并启用 UIDocumentPickerViewController?
- android - Android NDK:在 android_main 函数中处理和创建输入事件
- nodemailer - 如何使用 nodemailer 发送 html 模板?
- node.js - 创建离子应用程序时无法解析依赖树
- arrays - 程序警告中的gettinan错误:函数'Binsearch'的隐式声明[-Wimplicit-function-declaration] res = Binsearch(arr,n-1,0,x);