2017-05-19 18 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将是一种方法。 –