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