2017-09-07 49 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); 
    } 
相關問題