2017-09-07 35 views
0

我正在使用C#和JSON.NET。以下是两种类型。能够反序列化字符串类型但不支持对象类型

JSON object - var user = { "name": "test", "title": "mytitle"}; 
    JSON String - var user1 = "{ \"name\": \"test\", \"title\": \"mytitle\" }";  

使用Newtonsoft.Json反序列化JSON对象。我正在处理JSON的C#代码。

 public class sampledata 
     { 
     [JsonProperty("name")] 
     public string name { get; set; } 

     [JsonProperty("title")] 
     public string title { get; set; } 
     } 
    public void SampleEvent(string param) 
     { 

      sampledata s = JsonConvert.DeserializeObject<sampledata>(param); 
     } 

当我在参数得到JSON字符串反序列化是好的。但是,当我在参数JSON对象 - 我得到第一个错误是

“不能在当前JSON阵列(例如[1,2,3])反序列化为类型‘UCRS.MainWindow +的sampleData’因为类型需要JSON对象 (例如{“名称”:“值”})来正确地反序列化

为了解决这个错误或者改变JSON来JSON对象(例如 {“名称”。: “value”})或将反序列化类型更改为数组或实现集合接口(例如ICollection,IList)的数组或就像可以从JSON数组反序列化的List。 也可以将JsonArrayAttribute添加到该类型,以强制它从一个JSON数组中反序列化 。

路径 '',1号线,位置1

所以我改变了代码:

 List<sampledata> s = JsonConvert.DeserializeObject<List<sampledata>>(param); 

然后我面临的不同问题

“意外的性格遇到同时解析值:o。Path'', 第1行,第1位。“

当在网页中引发一些事件我正在使用webbrowser objectforscripting在c#中处理该事件。我总是得到JSON对象作为参数。如何反序列化C#中的JSON对象?请帮助

+1

发布其抛出这个错误,而不是一个实物模型 – Rahul

+0

你如何调用该方法与对象的确切JSON字符串? object.ToString()将不起作用,因为该对象是一个匿名类型,并不会影响JSON字符串 – Arcturus

+0

@Rahul - 这是抛出错误的相同示例。 {“name”:“test”,“title”:“mytitle”}这是试图反序列化抛出错误时的JSON对象。 –

回答

0

其两个

string jsonObject = @"{""name"":""test"",""title"":""mytitle""}"; 
var jsonString = "{ \"name\": \"test\", \"title\": \"mytitle\" }"; 

var values1 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonObject); 
var values2 = JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonString); 

这个漂亮的simple..working也正在

var values3 = JsonConvert.DeserializeObject<sampledata>(jsonObject); 

我创建JObject

  JObject jObject = new JObject 
      { 
       {"name", "test" }, 
       {"title", "mytitle" } 
      }; 
      string jObjectStr = jObject.ToString(); 
var values = JsonConvert.DeserializeObject<sampledata>(jObjectStr); 
0

的代码更新行:

List<sampledata> s = JsonConvert.DeserializeObject<List<sampledata>>(param); 

非常好。

这里的问题是,当您尝试反序列化到列表时,反序列化程序期待数组。

试着让它成为一个数组。这行代码添加到帕拉姆字符串:

param ="["+param+"]";//make it an array before deserialization 

完整代码:

public class sampledata 
    { 
    [JsonProperty("name")] 
    public string name { get; set; } 

    [JsonProperty("title")] 
    public string title { get; set; } 
    } 
public void SampleEvent(string param) 
    { 
     param ="["+param+"]";//make it an array before deserialization 
     List<sampledata> s = JsonConvert.DeserializeObject<List<sampledata>>(param); 
    } 
相关问题