2017-05-19 20 views
1

反序列化字典我有這個類:無法從JSON

class SoporteFile 
    { 
     public Evento[] eventos { get; set; } 
     public Programacion[] programaciones { get; set; } 
     public static Dictionary<int, object[]> soportes { get; set; } 
    } 

然後我有Soporte

class Soporte 
    { 
     public Aviso[] avisos { get; set; } 
     public Placa[] placas { get; set; } 
     public Portada[] portadas { get; set; } 
     public Efemeride[] efemerides { get; set; } 
     public Comunicado[] comunicados { get; set; } 
    } 

從SoporteFile類字典,應該匹配類Soporte。 soportes [0]應該有一個Aviso數組,soportes [1]應該有一個Placa數組等,當我用Json.NET解析它時,即使沒有Dictionary Soportes和Soporte類之間的關係,我也沒有錯誤要分析好(我不知道這是否是),但是當我嘗試訪問字典soportes這樣的(第一反序列化):

SoporteFile curContent = JsonConvert.DeserializeObject<SoporteFile>(File.ReadAllText(curFolder + @"/Contenido.json")); 

curContent.soportes[0]我得到一個錯誤(錯誤CS0176會員不能與訪問實例引用;改爲使用類型名稱對其進行限定)。如果我這樣做SoporteFile.soportes[0]我得到參考沒有建立作爲一個對象的實例(這是從西班牙語翻譯的最後一個錯誤,它可以稍微不同)。我做錯了什麼?

如果它是需要它,這是我嘗試反序列化JSON:

{ 
"eventos": [ 
    { 
     "id_evento": 5, 
     "id_calendario": 5, 
     "id_usuario": 1, 
     "fecha_carga": "2017-04-25 08:47:20", 
     "descripcion": "Mañanas", 
     "lugar": null, 
     "resumen": null, 
     "fecha_inicio": "2017-05-16", 
     "hora_inicio": "06:00:00", 
     "fecha_limite": "2017-05-16", 
     "hora_limite": "12:00:00", 
     "dia_completo": 0, 
     "id_estado": null, 
     "recordatorio": null, 
     "bloqueado": 0, 
     "id_programacion": 1, 
     "color": null 
    }, 
    { 
     "id_evento": 8, 
     "id_calendario": 5, 
     "id_usuario": 1, 
     "fecha_carga": "2017-04-27 16:51:56", 
     "descripcion": "Tarde", 
     "lugar": null, 
     "resumen": null, 
     "fecha_inicio": "2017-05-16", 
     "hora_inicio": "12:00:00", 
     "fecha_limite": "2017-05-16", 
     "hora_limite": "20:00:00", 
     "dia_completo": 0, 
     "id_estado": null, 
     "recordatorio": null, 
     "bloqueado": 0, 
     "id_programacion": 1, 
     "color": null 
    }, 
    { 
     "id_evento": 5, 
     "id_calendario": 5, 
     "id_usuario": 1, 
     "fecha_carga": "2017-04-25 08:47:20", 
     "descripcion": "Mañanas", 
     "lugar": null, 
     "resumen": null, 
     "fecha_inicio": "2017-05-17", 
     "hora_inicio": "06:00:00", 
     "fecha_limite": "2017-05-17", 
     "hora_limite": "12:00:00", 
     "dia_completo": 0, 
     "id_estado": null, 
     "recordatorio": null, 
     "bloqueado": 0, 
     "id_programacion": 1, 
     "color": null 
    }, 
    { 
     "id_evento": 8, 
     "id_calendario": 5, 
     "id_usuario": 1, 
     "fecha_carga": "2017-04-27 16:51:56", 
     "descripcion": "Tarde", 
     "lugar": null, 
     "resumen": null, 
     "fecha_inicio": "2017-05-17", 
     "hora_inicio": "12:00:00", 
     "fecha_limite": "2017-05-17", 
     "hora_limite": "20:00:00", 
     "dia_completo": 0, 
     "id_estado": null, 
     "recordatorio": null, 
     "bloqueado": 0, 
     "id_programacion": 1, 
     "color": null 
    }, 
    { 
     "id_evento": 5, 
     "id_calendario": 5, 
     "id_usuario": 1, 
     "fecha_carga": "2017-04-25 08:47:20", 
     "descripcion": "Mañanas", 
     "lugar": null, 
     "resumen": null, 
     "fecha_inicio": "2017-05-18", 
     "hora_inicio": "06:00:00", 
     "fecha_limite": "2017-05-18", 
     "hora_limite": "12:00:00", 
     "dia_completo": 0, 
     "id_estado": null, 
     "recordatorio": null, 
     "bloqueado": 0, 
     "id_programacion": 1, 
     "color": null 
    }, 
    { 
     "id_evento": 8, 
     "id_calendario": 5, 
     "id_usuario": 1, 
     "fecha_carga": "2017-04-27 16:51:56", 
     "descripcion": "Tarde", 
     "lugar": null, 
     "resumen": null, 
     "fecha_inicio": "2017-05-18", 
     "hora_inicio": "12:00:00", 
     "fecha_limite": "2017-05-18", 
     "hora_limite": "20:00:00", 
     "dia_completo": 0, 
     "id_estado": null, 
     "recordatorio": null, 
     "bloqueado": 0, 
     "id_programacion": 1, 
     "color": null 
    } 
], 
"programaciones": [ 
    { 
     "id_programacion": 1, 
     "nombre": "Programación estándar", 
     "tipo_corte": 1, 
     "duracion": null, 
     "soportes": [ 
      { 
       "id_soporteprogramacion": 10, 
       "id_programacion": 1, 
       "soporte": 2, 
       "orden": null, 
       "cantidad": 10, 
       "duracion": null 
      }, 
      { 
       "id_soporteprogramacion": 11, 
       "id_programacion": 1, 
       "soporte": 3, 
       "orden": 1, 
       "cantidad": 12, 
       "duracion": null 
      }, 
      { 
       "id_soporteprogramacion": 12, 
       "id_programacion": 1, 
       "soporte": 1, 
       "orden": 2, 
       "cantidad": 5, 
       "duracion": null 
      }, 
      { 
       "id_soporteprogramacion": 13, 
       "id_programacion": 1, 
       "soporte": 12, 
       "orden": 3, 
       "cantidad": 1, 
       "duracion": null 
      }, 
      { 
       "id_soporteprogramacion": 14, 
       "id_programacion": 1, 
       "soporte": 7, 
       "orden": 4, 
       "cantidad": 5, 
       "duracion": null 
      }, 
      { 
       "id_soporteprogramacion": 15, 
       "id_programacion": 1, 
       "soporte": 13, 
       "orden": 5, 
       "cantidad": 1, 
       "duracion": null 
      }, 
      { 
       "id_soporteprogramacion": 16, 
       "id_programacion": 1, 
       "soporte": 8, 
       "orden": 6, 
       "cantidad": 10, 
       "duracion": null 
      } 
     ] 
    } 
], 
"soportes": { 
    "2": [ 
     { 
      "id_placa": 2, 
      "id_ref": 1, 
      "timestamp": "2017-05-16 19:38:35", 
      "id_region": 1, 
      "vigencia_desde": "2017-04-12 08:13:00", 
      "vigencia_hasta": "2018-04-12 08:13:00", 
      "duracion": 1, 
      "imagen": "17202847_10212332856146238_6497670072350234982_n.jpg", 
      "texto": "el texto", 
      "orden": 0, 
      "audio": null 
     }, 
     { 
      "id_placa": 3, 
      "id_ref": 2, 
      "timestamp": "2017-05-16 19:38:35", 
      "id_region": 1, 
      "vigencia_desde": "2017-04-12 08:13:00", 
      "vigencia_hasta": "2018-04-12 08:13:00", 
      "duracion": 1, 
      "imagen": null, 
      "texto": "sin imagen", 
      "orden": 0, 
      "audio": null 
     } 
    ], 
    "1": [ 
     { 
      "id_aviso": 7, 
      "id_ref": 2, 
      "timestamp": "2017-05-16 19:38:35", 
      "id_region": 1, 
      "vigencia_desde": "2017-05-16 19:00:00", 
      "vigencia_hasta": "2018-05-16 23:59:00", 
      "titulo": "RENAULT MEGANE", 
      "id_categoriaaviso": 1, 
      "texto": "TEXTO DEL AVISO", 
      "contacto": null, 
      "imagen": null 
     }, 
     { 
      "id_aviso": 8, 
      "id_ref": 4, 
      "timestamp": "2017-05-16 19:38:35", 
      "id_region": 1, 
      "vigencia_desde": "2017-05-16 19:00:00", 
      "vigencia_hasta": "2018-05-16 23:59:00", 
      "titulo": "FORD FOCUS", 
      "id_categoriaaviso": 1, 
      "texto": "FORD", 
      "contacto": null, 
      "imagen": "Apertura_2008_La_Capital_Rosario.jpg" 
     } 
    ], 
    "13": { 
     "id_region": 1, 
     "timestamp": "2017-05-16 19:38:35", 
     "fecha": "2017-05-16", 
     "descripcion": "El aporte de aire húmedo desde el norte mantiene abundante nubosidad y menor amplitud térmica, mientras que sobre la región Patagónica ingresa un frente frío dando lugar a algunas precipitaciones y descenso de temperatura. " 
    }, 
    "7": [ 
     { 
      "id_portada": 1, 
      "timestamp": "2017-05-16 19:38:35", 
      "id_region": 1, 
      "nombre": "La nación", 
      "url": "\\1.jpg" 
     }, 
     { 
      "id_portada": 2, 
      "timestamp": "2017-05-16 19:38:35", 
      "id_region": 1, 
      "nombre": "Clarín", 
      "url": "\\2.jpg" 
     } 
    ], 
    "8": [ 
     { 
      "id_efemeride": 6, 
      "id_ref": 2, 
      "timestamp": "2017-05-16 19:38:35", 
      "id_region": 1, 
      "fecha": "2017-05-17", 
      "titulo": "Día del enfermero 2", 
      "texto": "En enero de 1974, se tomó la decisión de celebrar una jornada conmemorativa de las contribuciones de los enfermeros a la sociedad, promovida por el Consejo Internacional de Enfermería, que se celebra en todo el mundo cada 12 de mayo, conmemorando el natalicio de Florence Nightingale, considerada \\\"fundadora\\\" de la enfermería moderna. Nacida en 1820, de fe anglicana, creía que Dios la había inspirado para ser enfermera. Alcanzó fama mundial por sus trabajos precursores de enfermería en la asistencia a los heridos durante la guerra de Crimea.", 
      "imagen": null, 
      "video": null, 
      "duracion": 10 
     } 
    ] 
} 

}

編輯:我可能需要從字典取出靜電。如果我這樣做,我得到這個錯誤:「不能反序列化當前的JSON對象(例如{」name「:」value「})到類型'System.Object []',因爲該類型需要一個JSON數組(例如[1, 2,3])來正確地反序列化。「

+0

參考:[微軟文檔CS0176(https://開頭的文檔.microsoft.com/en-us/dotnet/articles/csharp/misc/cs0176) –

+0

Deserialize如何知道要在soportes中構建什麼類型的對象?也許你需要使用Dictionary 然後將它轉換爲你需要使用的任何東西。也想知道爲什麼你使用靜態soportes。 –

+0

如果我將STATIC用於字典,我得到一個反序列化問題:「無法反序列化當前的JSON對象(例如{」name「:」value「})到類型'System.Object []'中,因爲該類型需要JSON數組(例如[1,2,3])來正確地反序列化。「 –

回答

0

試試這個 - 爲我工作運行代碼: (爲什麼你必須在指定類型的對象數組?)

public Dictionary<int, object> soportes { get; set; } 
+0

好吧,這不會得到一個解析錯誤,但是如何訪問存儲在soportes中的值?我試過'Aviso [] misAvisos =(Aviso [])curContent.soportes [2];'但它說「不能轉換'Newtonsoft.Json.Linq.JArray'鍵入'CreativaTV.Aviso []」。 –

+0

http://www.newtonsoft.com/json/help/html/ToObjectType.htm將是一種方法。 –