Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何填充UserL列表?_C#_Json_Json.net - Fatal编程技术网

C# 如何填充UserL列表?

C# 如何填充UserL列表?,c#,json,json.net,C#,Json,Json.net,我希望填充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

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

你现在安排事情的方式是。。您需要创建
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
      }
   ]
}
进入

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

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

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


你面临什么问题?有错误吗?我首先看到的是1。为什么要传递
json
,然后试图打开一个文件,然后从json反序列化?2.除了初始化列表之外,您实际上没有在代码中的任何地方设置
UserL=
,是否还有遗漏的代码?1。我不知道该怎么回答。到目前为止,我主要是这样进行反序列化的。我还有别的事要做吗?2.这就是问题所在。我想填充这个UserL,但我不确定如何填充。我需要填充用户列表,以便能够在需要时调用其成员。不,这是运行它所需的唯一代码,另一个是我试图以不成功的方式填充列表。到目前为止,控制台输出的唯一错误是:
Exception:Newtonsoft.Json.JsonSerializationException:无法将当前Json对象(例如{“name”:“value”})反序列化为“System.Collections.Generic.List1”类型[Cuvue.jsonmanagement.User]”,因为该类型需要一个JSON数组(例如[1,2,3])才能正确反序列化。路径“UserArr”,第2行,位置11。
1.我的错,参数名为“JSON”听起来像是在向方法传递一个json字符串,而不是传递一个json文件名..现在有意义了。2.这是您使用的json的一个问题-可以发布吗?可读性更强一点。
[  
   {  
      "Username":"User2",
      "UserID":307618173073489920,
      "WarnCount":0,
      "Level":0,
      "XP":0
   },
   {  
      "UserName":"User1",
      "UserID":385453321999089664,
      "WarnCount":0,
      "Level":0,
      "XP":0
   }
]
public class RootObject
{
    public List<User> UserArr = new List<User>();
}

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

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