WebApiConfig - Ignorare i valori empty e null

di il
1 risposte

WebApiConfig - Ignorare i valori empty e null

Ciao,
utilizzo un controlle che invia i dati, presi da un database, riempendo una classe. Al momento della serializzazione del Json vorrei eliminare tutti i valori empty\null\guid.empty.
Per esempio:
"Person" : {
"Surname" : "Surname",
"Name" : "Name",
"Sex" : "",
"BirthDate" : null,
"BirthPlace" : "BirthPlace",
"ID" : "00000000-0000-0000-0000-000000000000",
"IsEnabled": false
}

Vorrei che fosse:
"Person" : {
"Surname" : "Surname",
"Name" : "Name",
"BirthPlace" : "BirthPlace",
"IsEnabled": false
}

Nel WebApiConfig ho inserito la riga:
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
che correttamente mi ignora i valori null (ma non gli empty).

Ho trovato che si potrebbe utilizzare
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore };
che ignora tutti i valori di default. Purtroppo però ho visto che ignora i default anche dei bool e degli integer. Quindi mi ignorerebbe anche la mia "IsEnabled": false, che invece vorrei avere nel json.

Non conosco molto bene le impostazioni del WebApiConfig e quindi mi chiedevo se è possibile nella DefaultValueHandling.Ignore specificare solo i tipi che si vogliono ignorare o se c'è un altro metodo per farlo.
Grazie

1 Risposte

  • Re: WebApiConfig - Ignorare i valori empty e null

    Per evitare che vengano serializzati i valori delle property quando sono vuoti o nulli, puoi usare le Data Annotations
    ovvero gli attributi di serializzazione.

    Nella classe includi la seguente Using se non vi fosse già:
    using System.Runtime.Serialization;
    e poi dichiari la property nel seguente modo:
    [DataMember(Name = "D", EmitDefaultValue = false)]
    public string Description
    {
    get
    {
    return mDescription;
    }
    set
    {
    mDescription = value;
    OnPropertyChanged(FLD_Description);
    }
    }
    Il Name nell'attributo DataMember ti permette di cambiare il nome della property scritto nel Json se come nel caso qui sopra hai bisogno di qualcosa di diverso dal nome della property nella classe C#
    Saluti
Devi accedere o registrarti per scrivere nel forum
1 risposte