簡體   English   中英

無法從JSON反序列化Dictionary

[英]Can't deserialize Dictionary from 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的類Dictionary應與Soporte類匹配。 soportes [0]應該有一個Aviso數組,soportes [1] shoud有一個Placa數組等。當我用Json.NET解析它時,即使在Dictionary soportes和Soporte類之間沒有關系,我也沒有錯誤,似乎解析好(我不知道是不是),但是當我嘗試訪問像這樣的詞典時(第一次反序列化):

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

}

編輯 :我可能需要從Dictionary中取出靜態。 如果我這樣做,我會收到此錯誤:“無法將當前JSON對象(例如{”name“:”value“})反序列化為類型'System.Object []',因為該類型需要一個JSON數組(例如[1, 2,3])正確反序列化。“

試試這個 - 對我運行代碼起作用:(為什么你在類型中指定了一個對象數組?)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM