2017-08-26 165 views
-1

我試圖反序列化下面的JSON:C#反序列化JSON響應

{ 
    "related": [ 
     { 
      "titulo": "pt cruiser models" 
     }, 
     { 
      "titulo": "pt 19" 
     }, 
     { 
      "titulo": "isel pt" 
     }, 
     { 
      "titulo": "ewee pt" 
     }, 
     { 
      "titulo": "camera pt" 
     }, 
     { 
      "titulo": "pt 24 7" 
     }, 
     { 
      "titulo": "ryan pt 22" 
     }, 
     { 
      "titulo": "taurus pt 24 7" 
     }, 
     { 
      "titulo": "stearman pt 17" 
     }, 
     { 
      "titulo": "pt 17 stearman" 
     }, 
     { 
      "titulo": "star wars pt" 
     }, 
     { 
      "titulo": "temperature sensor pt 100" 
     }, 
     { 
      "titulo": "pt 100 temperature sensor" 
     }, 
     { 
      "titulo": "ejot delta pt" 
     }, 
     { 
      "titulo": "delta pt screws" 
     }, 
     { 
      "titulo": "chrysler pt cruiser cabriolet" 
     }, 
     { 
      "titulo": "ryan pt 22 for sale" 
     } 
    ] 
} 

我有以下clases:

class Related 
{ 
    private Titulos _related; 

    public Titulos related 
    { 
     set { _related = value; } 
     get { return _related; } 
    } 
} 

class Titulos 
{ 

    private string _titulo; 
    public string titulo 
    { 
     set 
     { 
      _titulos.Add(value); 
      _titulo = value; 
     } 
     get { return _titulo; } 
    } 

    private List<string> _titulos = new List<string>(); 
    public List<string> titulos 
    { 
     set 
     { 
      _titulos = value; 
     } 
     get 
     { 
      return _titulos; 
     } 
    } 
} 

對於從響應反序列化JSON:

response_related_search = readStream.ReadToEnd(); 
Console.WriteLine(response_related_search); 
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Related>(response_related_search); 

錯誤是:

要修復此錯誤,請將JSON更改爲JSON對象(例如, {「name」:「value」})或將反序列化類型更改爲實現集合接口(例如ICollection,IList)的數組或類型,如列表& lt; T & gt;可以從JSON數組中反序列化。 JsonArrayAttribute也可以添加到類型中,以強制它從JSON數組反序列化。 Path'related',line 1,position 12.

我在這種情況下有點迷路,無法弄清楚誰來解決它。

任何幫助?

謝謝。

+0

有很多在線應用程序,它會根據給定的json爲您生成類。例如[https://jsonutils.com/](https://jsonutils.com/) – Fabio

+0

感謝@Fabio的信息 – Apalabrados

回答

2

JSON中沒有titulos屬性,這意味着您的C#數據模型不會反映您嘗試反序列化的數據。

看起來像你的類應該是:

class Related 
{ 
    public List<Titulos> related { get; set; } 
} 

class Titulos 
{ 
    public string titulo { get; set; } 
} 
+2

作爲OP的附加答案,如果OP要保留屬性的名稱以遵循.Net約定:可以使用[JsonPropertyAttribute](https://www.newtonsoft.com/json/help/html/JsonPropertyName.htm)分隔json名稱和.net屬性名稱 – Fabio

0

你需要像你這樣的JSON對象必須使用相同的命名約定,JSON總是在駝峯迴來。其次,你的代碼有私有變量,也有一些額外的東西。嘗試下面的代碼。

class Related 
{ 

    public Titulos[] related { get; set; } 


} 

class Titulos 
{ 

    public string titulo { get; set; } 


} 

並執行上面的結果代碼。

  string jsonObject = @"{ 
        'related': [ 
         { 
          'titulo': 'pt cruiser models' 
         }, 
         { 
          'titulo': 'pt 19' 
         }, 
         { 
          'titulo': 'isel pt' 
         }, 
         { 
          'titulo': 'ewee pt' 
         }, 
         { 
          'titulo': 'camera pt' 
         }, 
         { 
          'titulo': 'pt 24 7' 
         }, 
         { 
          'titulo': 'ryan pt 22' 
         }, 
         { 
          'titulo': 'taurus pt 24 7' 
         }, 
         { 
          'titulo': 'stearman pt 17' 
         }, 
         { 
          'titulo': 'pt 17 stearman' 
         }, 
         { 
          'titulo': 'star wars pt' 
         }, 
         { 
          'titulo': 'temperature sensor pt 100' 
         }, 
         { 
          'titulo': 'pt 100 temperature sensor' 
         }, 
         { 
          'titulo': 'ejot delta pt' 
         }, 
         { 
          'titulo': 'delta pt screws' 
         }, 
         { 
          'titulo': 'chrysler pt cruiser cabriolet' 
         }, 
         { 
          'titulo': 'ryan pt 22 for sale' 
         } 
        ] 
       }"; 


     var result = JsonConvert.DeserializeObject<Related>(jsonObject); 

在結果之後放置一個斷點,並且擁有所有對象。享受...