Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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# 将JSON转换为对象失败-无法将当前JSON对象反序列化为System.Collections.Generic.List_C#_Json_Json.net - Fatal编程技术网

C# 将JSON转换为对象失败-无法将当前JSON对象反序列化为System.Collections.Generic.List

C# 将JSON转换为对象失败-无法将当前JSON对象反序列化为System.Collections.Generic.List,c#,json,json.net,C#,Json,Json.net,我正在使用www.textlocal.in的API,它返回一个JSON格式的对象 JSON { "warnings":[ { "message":"Number is in DND", "numbers":"917000000000" } ], "balance":900, "batch_id":311110011, "cost":1, "num_messages":1, "mess

我正在使用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"
}
我试图解析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; }
}
private void按钮1\u单击(对象发送者,事件参数e)
{
var a=JsonConvert.DeserializeObject(richTextBox1.Text);
}
公共类JSONTOBJ
{
公共警告[]警告{get;set;}
公共整数平衡{get;set;}
公共int批处理_id{get;set;}
公共整数成本{get;set;}
公共int num_消息{get;set;}
公共消息{get;set;}
公共字符串收据\u url{get;set;}
公共字符串自定义{get;set;}
公共消息[]消息{get;set;}
公共字符串状态{get;set;}
}
公开课警告
{
公共字符串消息{get;set;}
公共字符串编号{get;set;}
}
公共类消息
{
公共字符串id{get;set;}
公共整数收件人{get;set;}
}
公共类消息
{
公共int num_部分{get;set;}
公共字符串发送方{get;set;}
公共字符串内容{get;set;}
}
我收到一条异常消息,消息如下:

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; }
}
Newtonsoft.Json.JsonSerializationException:'无法反序列化 将当前JSON对象(例如{“name”:“value”})转换为类型 'System.Collections.Generic.List`1[WindowsFormsApp1.Form2+JSONTOBJ[]' 因为该类型需要一个JSON数组(例如[1,2,3])来反序列化 正确地要修复此错误,请将JSON更改为JSON数组 (例如[1,2,3])或更改反序列化类型,使其成为正常类型 .NET类型(例如,不是integer之类的基元类型,也不是集合 可以从JSON反序列化的类型(如数组或列表) 对象还可以将JsonObjectAttribute添加到类型以强制它 从JSON对象反序列化。路径“警告”,第1行,位置 12.'


基于字符串,类结构应如下所示:

public class Warning
{
    public string message { get; set; }
    public string numbers { get; set; }
}

public class Message
{
    public int num_parts { get; set; }
    public string sender { get; set; }
    public string content { get; set; }
}

public class Message2
{
    public string id { get; set; }
    public long recipient { get; set; }
}

public class RootObject
{
    public List<Warning> 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 List<string> inDND { get; set; }
    public List<Message2> messages { get; set; }
    public string status { get; set; }
}
公共类警告
{
公共字符串消息{get;set;}
公共字符串编号{get;set;}
}
公共类消息
{
public int num_parts{get;set;}
公共字符串发送方{get;set;}
公共字符串内容{get;set;}
}
公共类消息2
{
公共字符串id{get;set;}
公共长收件人{get;set;}
}
公共类根对象
{
公共列表警告{get;set;}
公共整数平衡{get;set;}
公共int批处理_id{get;set;}
公共整数成本{get;set;}
公共int num_消息{get;set;}
公共消息{get;set;}
公共字符串收据\u url{get;set;}
公共字符串自定义{get;set;}
公共列表inDND{get;set;}
公共列表消息{get;set;}
公共字符串状态{get;set;}
}

看起来您的类结构不正确,请使用visual studio从json字符串生成C#类,然后使用生成的类尝试反序列化类


阅读:

首先,您必须了解API返回的内容

现在,您正在尝试解析
列表
jsontobj
数组(
列表
)。您必须决定是使用API现在提供的
jsontobj[]
还是
List
或简单的
jsontobj

var a = JsonConvert.DeserializeObject<jsonToObj>(richTextBox1.Text);
此外,如果需要以下信息,您可以将
inDND
添加到
jsontobj
类中:

public class jsonToObj
{
  ...
  public string[] inDND { get; set; }
  ...
}

我模拟了您的问题,并进行了以下有效的更改:

  • 将反序列化的方法更改为:

    var a = JsonConvert.DeserializeObject<jsonToObj>(richTextBox1.Text);
    

  • 这些更改解决了您的问题。

    看起来这是一篇非常古老的帖子,仍在考虑回答

    首先,Json数据是单数的,这意味着

    var a = JsonConvert.DeserializeObject<List<jsonToObj[]>>(richTextBox1.Text);
    

    确保分析单个对象而不是对象列表。

    认为您只需要
    JsonConvert.DeserializeObject(richTextBox1.Text)
    成为
    JsonConvert.DeserializeObject(richTextBox1.Text)基于您提供的JSON@DurgeshPadha-根据您生成的字符串,将数组更改为list,类have list notarray@DurgeshPadha-尝试给定的类结构,它必须起作用
    
    var a = JsonConvert.DeserializeObject<List<jsonToObj[]>>(richTextBox1.Text);
    
    var a = JsonConvert.DeserializeObject<List<jsonToObj>>(richTextBox1.Text);
    
    var a = JsonConvert.DeserializeObject<jsonToObj>(richTextBox1.Text);
    
    enclose the data with [ and ], which would do the trick.