Newtonsoft在C#中读取数组

时间:2017-05-14 14:20:56

标签: c# json json.net

我正在尝试将一个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;
}

提前致谢!

编辑:完整代码可用here

2 个答案:

答案 0 :(得分:2)

你的问题是双重的。

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

另一个问题,即您的问题中的错误,是您错误地使用了 Newtonsoft.Json.JsonConvert.PopulateObject 方法。看看documentation

public static void PopulateObject(
    string value,
    Object target
)
     

参数

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()失败。 (请注意,错误消息会抱怨使用C意外启动json数据。)

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

string filePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\zero.json";
string json = File.ReadAllText(filePath);
List<login> fetch = Newtonsoft.Json.JsonConvert.DeserializeObject<List<login>>(json);

答案 1 :(得分:0)

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

尝试以下代码:

List<login> fetch = Newtonsoft.Json.JsonConvert.DeserializeObject<List<login>>(json);

请检查 JsonConvert.DeserializeObject