I am using Newtonsoft.Json for years but now I am facing something I can not solve.
I have a class that contains this property:
public SortedDictionary<ePosizioniColonna, ColonnaExcel> Colonne { get; set; } = new SortedDictionary<ePosizioniColonna, ColonnaExcel>() {
{ ePosizioniColonna.FESTIVITA, new ColonnaExcel() { Intestazione = "Festività", Larghezza = 9 } },
{ ePosizioniColonna.UTENTE, new ColonnaExcel() { Intestazione = "Utente" } },
{ ePosizioniColonna.DESCRIZIONE_ORA, new ColonnaExcel() { Intestazione = "Desc. Ora", Larghezza = 90 } },
{ ePosizioniColonna.DATA, new ColonnaExcel() { Intestazione = "Data", Larghezza = 12} },
{ ePosizioniColonna.UNITA_MISURA, new ColonnaExcel() { Intestazione = "Um", Larghezza = 6 } },
{ ePosizioniColonna.ORE_STANDARD, new ColonnaExcel() { Intestazione = "Ore\nStandard" } },
{ ePosizioniColonna.ORE_EXTRA_STANDARD, new ColonnaExcel() { Intestazione = "Ore\nExtra" } },
{ ePosizioniColonna.ORE_STANDARD_VIAGGIO, new ColonnaExcel() { Intestazione = "Ore\nStandard\nViaggio" } },
{ ePosizioniColonna.ORE_EXTRA_STANDARD_VIAGGIO, new ColonnaExcel() { Intestazione = "Ore\nExtra\nViaggio" } },
{ ePosizioniColonna.GRUPPO_1, new ColonnaExcel() { Intestazione = "" } },
{ ePosizioniColonna.GRUPPO_2, new ColonnaExcel() { Intestazione = "" } },
{ ePosizioniColonna.ORE_LAVORATE, new ColonnaExcel() { Intestazione = "Ore\nLavorate", Larghezza = 8 } },
{ ePosizioniColonna.ORE_VIAGGIO, new ColonnaExcel() { Intestazione = "Ore\nViaggio" } },
{ ePosizioniColonna.ORE_ORDINARIO, new ColonnaExcel() { Intestazione = "Ore\nOrdinario" } },
{ ePosizioniColonna.ORE_STRAORDINARIO, new ColonnaExcel() { Intestazione = "Ore\nStraordinario" } },
{ ePosizioniColonna.ORE_NOTTURNO, new ColonnaExcel() { Intestazione = "Ore\nNotturno" } },
{ ePosizioniColonna.ORE_NOTTURNO_FESTIVO, new ColonnaExcel() { Intestazione = "Ore\nNotturno\nFestivo" } },
{ ePosizioniColonna.ORE_STRAORD_NOTTURNO, new ColonnaExcel() { Intestazione = "Ore\nStraord.\nNotturno" } },
{ ePosizioniColonna.ORE_STRAORD_FESTIVO, new ColonnaExcel() { Intestazione = "Ore\nStraord.\nFestivo" } },
{ ePosizioniColonna.ORE_STRAORD_FESTIVO_NOTTURNO, new ColonnaExcel() { Intestazione = "Ore\nStraord.\nFestivo\nNotturno" } },
{ ePosizioniColonna.CODICE_COMMESSA, new ColonnaExcel() { Intestazione = "Codice\nCommessa" } },
{ ePosizioniColonna.AZIENDA, new ColonnaExcel() { Intestazione = "Azienda" } }
};
Where ePosizioniColonna
is an enum.
I have no problem serializing it, but I get the exception "cannot convert string into object" when I try to deserialize.
It works if I change the SortedDictionary
into:
public SortedDictionary<int, ColonnaExcel> Colonne { get; set; } = new SortedDictionary<int, ColonnaExcel>() {
{ (int)ePosizioniColonna.FESTIVITA, new ColonnaExcel() { Intestazione = "Festività", Larghezza = 9 } },
{ (int)ePosizioniColonna.UTENTE, new ColonnaExcel() { Intestazione = "Utente" } },
{ (int)ePosizioniColonna.DESCRIZIONE_ORA, new ColonnaExcel() { Intestazione = "Desc. Ora", Larghezza = 90 } },
{ (int)ePosizioniColonna.DATA, new ColonnaExcel() { Intestazione = "Data", Larghezza = 12} },
{ (int)ePosizioniColonna.UNITA_MISURA, new ColonnaExcel() { Intestazione = "Um", Larghezza = 6 } },
{ (int)ePosizioniColonna.ORE_STANDARD, new ColonnaExcel() { Intestazione = "Ore\nStandard" } },
{ (int)ePosizioniColonna.ORE_EXTRA_STANDARD, new ColonnaExcel() { Intestazione = "Ore\nExtra" } },
{ (int)ePosizioniColonna.ORE_STANDARD_VIAGGIO, new ColonnaExcel() { Intestazione = "Ore\nStandard\nViaggio" } },
{ (int)ePosizioniColonna.ORE_EXTRA_STANDARD_VIAGGIO, new ColonnaExcel() { Intestazione = "Ore\nExtra\nViaggio" } },
{ (int)ePosizioniColonna.GRUPPO_1, new ColonnaExcel() { Intestazione = "" } },
{ (int)ePosizioniColonna.GRUPPO_2, new ColonnaExcel() { Intestazione = "" } },
{ (int)ePosizioniColonna.ORE_LAVORATE, new ColonnaExcel() { Intestazione = "Ore\nLavorate", Larghezza = 8 } },
{ (int)ePosizioniColonna.ORE_VIAGGIO, new ColonnaExcel() { Intestazione = "Ore\nViaggio" } },
{ (int)ePosizioniColonna.ORE_ORDINARIO, new ColonnaExcel() { Intestazione = "Ore\nOrdinario" } },
{ (int)ePosizioniColonna.ORE_STRAORDINARIO, new ColonnaExcel() { Intestazione = "Ore\nStraordinario" } },
{ (int)ePosizioniColonna.ORE_NOTTURNO, new ColonnaExcel() { Intestazione = "Ore\nNotturno" } },
{ (int)ePosizioniColonna.ORE_NOTTURNO_FESTIVO, new ColonnaExcel() { Intestazione = "Ore\nNotturno\nFestivo" } },
{ (int)ePosizioniColonna.ORE_STRAORD_NOTTURNO, new ColonnaExcel() { Intestazione = "Ore\nStraord.\nNotturno" } },
{ (int)ePosizioniColonna.ORE_STRAORD_FESTIVO, new ColonnaExcel() { Intestazione = "Ore\nStraord.\nFestivo" } },
{ (int)ePosizioniColonna.ORE_STRAORD_FESTIVO_NOTTURNO, new ColonnaExcel() { Intestazione = "Ore\nStraord.\nFestivo\nNotturno" } },
{ (int)ePosizioniColonna.CODICE_COMMESSA, new ColonnaExcel() { Intestazione = "Codice\nCommessa" } },
{ (int)ePosizioniColonna.AZIENDA, new ColonnaExcel() { Intestazione = "Azienda" } }
};
So it seems that is related to the enum.
Can anyone suggest to me a possible solution to keep using the enum instead of int?