2015-02-05 93 views
1

你好:我有反序列化Json的問題: 這是我的JSON(字符串):C#:反序列化JSON列表

{[ 
    { 
    "IdGuid": "fac5d174-17d4-4330-a65e-07133e88e0ca", 
    "Nombre": "Asignaturas", 
    "Subtitulo": "Subtitulo de asignaturas", 
    "Descripcion": "Descripcion de asignaturas", 
    "urlFoto": "egio1.jpg" 
    }, 
    [ 
    { 
     "IdGuid": "a9a59e49-c318-4868-93a9-57347b4c4cad", 
     "Nombre": "Ciencias Naturales", 
     "Subtitulo": "", 
     "Descripcion": "Ciencias", 
     "urlFoto": "80.jpg" 
    }, 
    { 
     "IdGuid": "8ae0dc90-aa6a-4457-8e64-5f591f75416c", 
     "Nombre": "Documentos", 
     "Subtitulo": "", 
     "Descripcion": "", 
     "urlFoto": "asd.jpg" 
    }, 
    { 
     "IdGuid": "2ffbe004-316d-4a82-b4fe-0c43169766ad", 
     "Nombre": "Inglés", 
     "Subtitulo": "", 
     "Descripcion": "", 
     "urlFoto": "http://pue.jpg" 
    }, 
    { 
     "IdGuid": "62151f5c-f503-48a6-9801-c27e92aa240a", 
     "Nombre": "Matemática", 
     "Subtitulo": "", 
     "Descripcion": "", 
     "urlFoto": "http://pue.jpg" 
    } 
    ] 
]} 

,這是我的課:

public class Asignatura 
    { 
     public String idGuid { get; set; } 

     public String nombre { get; set; } 

     public String subtitulo { get; set; } 

     public String descripcion { get; set; } 

     public String urlFoto { get; set; } 
    } 

我需要生成帶有de JSON的Asignaturas列表。我正在嘗試

List<Asignatura> listaAsignaturas = new List<Asignatura>(); 
listaAsignaturas= JsonConvert.DeserializeObject<List<Asignatura>>(json); 

但無效。

  • 請幫我這個。
  • 我使用Newtonsoft.Json

(編輯) 添加類:

public class rootAsignatura 
{ 
    public Asignatura raiz; 
    public List<Asignatura> listaAsignaturas; 
} 

,並試圖:

rootAsignatura listaAsignaturas = new rootAsignatura(); 
listaAsignaturas = JsonConvert.DeserializeObject<rootAsignatura>(json); 

這種情況下繼續工作。

+3

你的JSON包含頂級兩個項目:一個'Asignatura'對象+一組「Asignatura」對象。你可以修復它的結構只是一個數組?這會讓你的反序列化代碼起作用。 – MarcinJuraszek 2015-02-05 17:55:17

+1

@MarcinJuraszek你應該發佈它作爲答案:) – DixonD 2015-02-05 17:57:05

+0

@MarcinJuraszek假設他的JSON格式是固定的,是否有反序列化爲2個元素列表的方式:第一個元素是一個「Asignatura」,第二個元素是一個'列表'? – 2015-02-05 17:58:35

回答

0

首先,我會聯繫web服務的所有者,告訴他們他們提供的JSON無效。

外部{...}那裏目前意味着他們正在服務一個對象,但該對象沒有鍵和值(這是必需的),它只是包裝一個數組。

無論如何,你可以通過在字符串的開始和結尾修整{}來解決這個問題。然後,您剩下一個Array,其第一項是Asignatura,第二項是Asignatura的Array。

如果你只是想一個List<Asignatura>,最簡單的方法可能是反序列化到一個JArray,然後解析各個元素:

/* Parse the underlying array after removing the opening and closing braces */ 
var array = JArray.Parse(json.Trim('{', '}')); 

/* Deserialize the first item in the array */ 
var signatureOne = array[0].ToObject<Asignatura>(); 

/* Deserialize the second item in the array as a List<Asignatura> */ 
List<Asignatura> signatureList = array[1].ToObject<List<Asignatura>>(); 

/* Add the first item to the array. You could also use Insert(0, signatureOne) to 
* put it at the front. */ 
signatureList.Add(signatureOne); 
+0

安德魯完美的工作,你是一個天才。我試試這個返回一個列表'' '名單 listAsignaturas =新名單();'' = listAsignaturas(名單)signatureList;' 和工作,是好? – 2015-02-05 19:18:18

+0

這看起來不錯,但我會更新代碼,使'signatureList'成爲'List '而不是那個,這將會更清潔。 – 2015-02-05 19:25:01

+0

@KevinF:請看我的更新,讓我知道如果有幫助 – 2015-02-05 19:25:30

2

你的JSON字符串有2個數組,一個數組有一個「Asignatura」,它有另一個「Asignatura」嵌套數組。刪除第二組「[]」括號。

+0

我無法刪除任何內容,因爲是webService的響應。 – 2015-02-05 18:06:39

+1

然後,您需要更改您要反序列化的對象。 特別是,您會得到,因此您閱讀的對象需要添加到列表對象或其他東西上。 – 2015-02-05 18:09:10

+0

馬特感謝您的迴應,我編輯添加新課程的問題,但繼續沒有工作。 – 2015-02-05 18:17:50