我希望填充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
}
]
}
答案 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");