99 votes

Comment puis-je convertir une classe en Dictionary<string,string>?

Puis-je convertir une classe en Dictionary?

Dans le Dictionary, je veux que les propriétés de ma classe soient des clés et la valeur d'une propriété particulière soit la valeur.

Supposons que ma classe soit

public class Location
{
    public string city { get; set; }
    public string state { get; set; }
    public string country { get; set; }
}

Supposons maintenant que mes données soient

city = Delhi
state = Delhi
country = India

Vous pouvez maintenant comprendre mon point facilement!

Je veux créer un dictionnaire! Ce dictionnaire devrait ressembler à:

Dictionary dix = new Dictionary();
dix.add("nom_de_la_propriété", "valeur_de_la_propriété");

Je peux obtenir la valeur! Mais comment puis-je obtenir les noms des propriétés (pas des valeurs)?

Que devrais-je coder pour le rendre dynamique? Cela devrait fonctionner pour chaque classe que je veux.

Vous pouvez comprendre cette question comme:

Comment puis-je obtenir une liste de propriétés d'une classe particulière?

Je vais à nouveau expliquer l'une de mes envies concernant un Dictionary! Cette question a surgi dans mon esprit à partir de la réponse à ma <a href="https://stackoverflow.com/q/9209272/1162201">question précédente</a>!!

0voto

Jon Points 684
protected string getExamTimeBlock(object dataItem)
{
    var dt = ((System.Collections.Specialized.StringDictionary)(dataItem));

    if (SPContext.Current.Web.CurrencyLocaleID == 1033) return dt["en"];
    else return dt["sv"];
}

0voto

Juste un cadeau pour quelqu'un qui a seulement besoin d'un Dictionnaire simple et plat ne nécessitant pas de hiérarchie ou de désérialiser de nouveau vers un objet comme moi

0voto

Vasya Milovidov Points 227

J'espère que cette extension pourra être utile à quelqu'un.

public static class Ext {
    public static Dictionary ToDict(this T target)
        => target is null
            ? new Dictionary()
            : typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public)
                        .ToDictionary(
                            x => x.Name,
                            x => x.GetValue(target)
                        );
}

0voto

Mohsen Barzgar Points 21
public static Dictionary ObjectToDictionary(object obj)
{
    return Newtonsoft.Json.Linq.JObject.FromObject(obj).ToObject>();
}

-2voto

TomTom Points 35574

Vous utilisez la réflexion et programmez. C'est simple - une demi-heure de travail pour obtenir des chaînes de caractères et en extraire la valeur, y compris les tests unitaires.

Ce n'est pas que cela ait beaucoup de sens. Cela ne ferait toujours pas de "votre classe un dictionnaire".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X