将JSON转换为字符串C#时使用JsonConvert.DeserializeObject出错

时间:2019-01-03 12:21:37

标签: c# json.net

将JSON转换为字符串(第二种方法)时,出现错误:

  

Newtonsoft.Json.JsonReaderException:'解析值时遇到意外字符:[。路径”,第1行,位置1。'

为什么我在第二种方法中遇到错误,但是代码在第一种方法中运行正常,为什么第二种方法有任何解决方案,因为我只能使用该方法?

代码:

static void Main(string[] args)
{
   string abc = "[{\"provider\":\"test\",\"schemes\":[{\"tyo\":\"1\",\"check\":\"99\",\"slotNumber\":\"0\"},{\"tyo\":\"2\",\"check\":\"99\",\"slotNumber\":\"469\"}]}]";

   var value = abc.FromJson().ToString();

   // Getting error in below line
   var value2 = abc.FromJson(typeof(String));       
}     

// First Method                    
public static object FromJson(this string json)
{
   var value = JsonConvert.DeserializeObject(json);
   return value;
}

// Second Method
public static object FromJson(this string json, Type type)
{
   var value = JsonConvert.DeserializeObject(json, type);     
   return value;
}                    

1 个答案:

答案 0 :(得分:4)

JsonConvert.DeserializeObject(string, Type)尝试将JSON解析为给定类型,将对象的属性分配给结果类型的属性。由于String不提供必要的属性(在您的情况下,它可能需要是一个数组,其对象必须提供providerschemes之类的属性),因此无法将其反序列化为字符串。

这是因为Newtonsoft.Json支持对对象数组进行反序列化:

var value2 = abc.FromJson(typeof(object[]));