Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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# C语言中的newtonsoftread数组#_C#_Json_Json.net - Fatal编程技术网

C# C语言中的newtonsoftread数组#

C# C语言中的newtonsoftread数组#,c#,json,json.net,C#,Json,Json.net,我试图在messagebox中获得json数组的条目,但似乎无法获得它总是提供给我的条目 Newtonsoft.Json.JsonReaderException:“分析值时遇到意外字符:C.路径“”,第0行,位置0。” 无论我在这里做什么,我都使用json: [ { "code": 200, "token": "yourtokenhere", "id": "youridhere", "user": "user", "message": "Successfully conne

我试图在messagebox中获得json数组的条目,但似乎无法获得它总是提供给我的条目

Newtonsoft.Json.JsonReaderException:“分析值时遇到意外字符:C.路径“”,第0行,位置0。”

无论我在这里做什么,我都使用json:

[
 {
  "code": 200,
  "token": "yourtokenhere",
  "id": "youridhere",
  "user": "user",
  "message": "Successfully connected"
 }
]
以下是我到目前为止得到的信息:

string json = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\zero.json";
login fetch = new login();
Newtonsoft.Json.JsonConvert.PopulateObject(json, fetch);
MessageBox.Show(fetch.user);
这是我做的C级:

class login
{
    public string code;
    public string token;
    public string id;
    public string user;
    public string message;
}
提前谢谢


编辑:完整代码可用

JSON数据是一个数组,您正试图将其反序列化为一个对象

请尝试以下代码:

List<login> fetch = Newtonsoft.Json.JsonConvert.DeserializeObject<List<login>>(json);
List fetch=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);
请查收
你的问题是双重的

一个问题是您希望将数组反序列化为对象。这里的其他答案已经解决了这个问题

另一个问题是,您错误地使用了Newtonsoft.Json.JsonConvert.PopulateObject方法,这是您问题中出现错误的原因。看看它:

参数

value
    Type: SystemString
    The JSON to populate values from.

target
    Type: SystemObject
    The target object to populate values onto.
请注意,此方法需要Json字符串数据作为第一个参数,而不是文件路径

因此,代码中发生的是变量json被分配给json文件的文件路径(
string json=Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+“\\zero.json”;
)。字符串变量json现在将有一个类似于
@“C:\Users\UserName\AppData\Roaming\zero.json”的内容

代码将此字符串作为json数据传递给PopulateObject()方法。但由于该字符串不是json数据(它只是文件路径),PopulateObject()将失败。(注意,错误消息抱怨json数据意外地以
C
开头)

实现您想要做的事情的一种可能性是,首先将Json文件内容读入字符串,然后将其传递给Json反序列化程序(与其他答案所示的方式相同):

string filePath=Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+“\\zero.json”;
字符串json=File.ReadAllText(文件路径);
List fetch=Newtonsoft.Json.JsonConvert.DeserializeObject(Json);

您试图将数组反序列化为对象。将一个数组反序列化为一个数组。我对json不太熟悉这是我第一次使用它。对不起,我会试试你的solution@Zeq,没关系。如果我的回答对你有帮助的话,我会很高兴,因为它仍然会给我同样的错误。我一定是做错了什么,不管怎样,谢谢!没问题!。这些事情很容易发生,也很容易被忽视。当看到您的问题时,首先让我感到困惑的是错误消息,它抱怨Json数据开头的omnious
C
字符。然后看一下您的代码示例,很明显它试图将文件路径字符串解析为Json,如
C:\...
。一个例子说明了为什么将完整的错误消息和问题描述放在一起通常非常有用:)所以我让它工作了,但现在我似乎无法获取id、消息等来显示我对json非常陌生,所以idk我应该做什么我尝试了
login get=new login
然后使用
MessageBox.Show(get.user)但这并不能说明什么,请后退一步。您现在遇到的问题与Json(或Json.NET)无关。你似乎很难掌握基本的C#概念。看看你在做什么:你用
login get=new login创建了一个新的(空的)登录实例。然后,您将显示这个新的空登录对象的“用户”字段/属性。你期望一个新的空登录实例包含什么?只是我以前的任何项目都没有这样做过,我在这里学习登录也是我创建的一个类,不用担心。这正是我现在和你一起做这种“心理体操”的原因:-P你真的理解我最后一句关于你对代码实际做了什么的评论吗?
value
    Type: SystemString
    The JSON to populate values from.

target
    Type: SystemObject
    The target object to populate values onto.
string filePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\zero.json";
string json = File.ReadAllText(filePath);
List<login> fetch = Newtonsoft.Json.JsonConvert.DeserializeObject<List<login>>(json);