我正在使用 www.textlocal.in 的 API,它返回一个 JSON 格式的对象。
JSON
{
"warnings":[
{
"message":"Number is in DND",
"numbers":"917000000000"
}
],
"balance":900,
"batch_id":311110011,
"cost":1,
"num_messages":1,
"message":{
"num_parts":1,
"sender":"TXTLCL",
"content":"Test1"
},
"receipt_url":"",
"custom":"",
"inDND":[
"917000000000"
],
"messages":[
{
"id":"1350123781",
"recipient":918819437284
}
],
"status":"success"
}
Run Code Online (Sandbox Code Playgroud)
我试图解析 JSON 的代码:
private void button1_Click(object sender, EventArgs e)
{
var a = JsonConvert.DeserializeObject<List<jsonToObj[]>>(richTextBox1.Text);
}
public class jsonToObj
{
public warnings[] warnings { get; set; }
public int balance { get; set; }
public int batch_id { get; set; }
public int cost { get; set; }
public int num_messages { get; set; }
public message message { get; set; }
public string receipt_url { get; set; }
public string custom { get; set; }
public messages[] messages { get; set; }
public string status { get; set; }
}
public class warnings
{
public string message { get; set; }
public string numbers { get; set; }
}
public class messages
{
public string id { get; set; }
public int recipient { get; set; }
}
public class message
{
public int num_part { get; set; }
public string sender { get; set; }
public string content { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我收到以下消息的异常:
Newtonsoft.Json.JsonSerializationException: '无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[WindowsFormsApp1.Form2+jsonToObj[]]' 因为类型需要一个 JSON 数组(例如 [1,2,3])来正确反序列化。要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为正常的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型)可以从 JSON 对象反序列化的数组或列表)。还可以将 JsonObjectAttribute 添加到类型以强制它从 JSON 对象反序列化。路径“警告”,第 1 行,位置 12。
首先,您必须弄清楚您的 API 返回什么。
现在你要解析List的jsonToObj Arrays(List<jsonToObj[]>)。您必须决定是使用您的 API 现在提供的ajsonToObj[]还是List<jsonToObj>simple jsonToObj:
var a = JsonConvert.DeserializeObject<jsonToObj>(richTextBox1.Text);
Run Code Online (Sandbox Code Playgroud)
但这会抛出:
JSON 整数 918819437284 对于 Int32 来说太大或太小。路径 'messages[0].recipient',第 25 行,位置 33。”
因此,请确保Long为此使用 a 。
public class messages
{
public string id { get; set; }
public long recipient { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您需要信息,您可以添加inDND到您的jsonToObj课程中:
public class jsonToObj
{
...
public string[] inDND { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8631 次 |
| 最近记录: |