2017-05-19 4 views
1

J'ai cette classe:ne peut désérialiser Dictionnaire de JSON

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

Ensuite, je dois le 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; } 
    } 

Le Dictionnaire de classe de SoporteFile, doit correspondre à la classe Soporte. soportes [0] devrait avoir un tableau Aviso, soportes [1] avoir un tableau Placa, etc. Quand je l'analyse avec Json.NET, même s'il n'y a pas de relation entre les soportes du dictionnaire et la classe Soporte, je n'ai pas d'erreur, il semble à l'analyse syntaxique bien (je ne sais pas si c'est), mais quand je tente d'accéder soportes Dictionnaire comme celui-ci (premier deserialize):

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

curContent.soportes[0] Je reçois une erreur (erreur CS0176 membre ne peut être consulté avec un référence d'instance, qualifiez-le avec un nom de type à la place). Et si je fais cela SoporteFile.soportes[0] je reçois référence non établie comme une instance d'un objet (cette dernière erreur traduite de l'espagnol, il peut être légèrement différent). Qu'est-ce que je fais mal?

S'il est besoin, voici le JSON j'essaie de désérialiser:

{ 
"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 
     } 
    ] 
} 

}

EDIT: Je dois probablement prendre la statique de dictionnaire. Si je fais cela, j'obtiens cette erreur: "Impossible de désérialiser l'objet JSON courant (par exemple {" name ":" value "}) dans le type" System.Object [] "car le type nécessite un tableau JSON (par exemple [1, 2,3]) à désérialiser correctement. "

+0

Pour référence: [CS0176 sur Microsoft Docs] (https: // docs .microsoft.com/fr/us/dotnet/articles/csharp/misc/cs0176) –

+0

Comment la désérialisation connaîtra-t-elle le type d'objet à construire dans soportes? Peut-être avez-vous besoin d'utiliser Dictionary , puis de le convertir en ce que vous voulez utiliser. Se demandant aussi pourquoi vous utilisez statique pour les soportes. –

+0

si je supprime STATIC du dictionnaire, j'obtiens un problème de désérialisation: "Impossible de désérialiser l'objet JSON actuel (par exemple {" name ":" value "}) dans le type" System.Object [] "car le type requiert un tableau JSON (par exemple [1,2,3]) pour désérialiser correctement. " –

Répondre

0

Essayez ceci - fonctionne pour moi l'exécution de votre code: (pourquoi avez-vous un tableau d'objet spécifié dans le type?)

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

Ok, cela n'obtient pas une analyse erreur, mais comment accéder aux valeurs stockées dans soportes? J'ai essayé 'Aviso [] misAvisos = (Aviso []) curContent.soportes [2];' mais il est dit "Impossible de convertir 'Newtonsoft.Json.Linq.JArray' en type 'CreativaTV.Aviso []". –

+0

http://www.newtonsoft.com/json/help/html/ToObjectType.htm serait un moyen. –