Créer dynamiquement et les membres de jeu/propriétés de la classe au moment de l'exécution

Comment puis-je créer et définir les membres/les propriétés d'une classe dynamiquement à l'exécution.

Ref: http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.trygetmember(v=vs. 110).aspx

J'ai essayé de modifier l'idée en fonction de mes besoins, mais il est incapable de le faire.

Je suis dans l'obligation de définir les membres de la classe au moment de l'exécution, les moyens, je voudrais récupérer le Key et Value à partir de la base de données et de ma classe sera entièrement dynamique avec pas de membres définis avant l'exécution, mais tous sont extraites de la base de données lors de l'exécution.

Alors, voici mon code (Prises à partir de MSDN):

public class DynamicObjDictionary : DynamicObject
{
    //The inner dictionary.
    Dictionary<string, object> dictionary = new Dictionary<string, object>();
    public int Count
    {
        get{return dictionary.Count;}
    }

public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        string name = binder.Name.ToLower();
        return dynDict.TryGetValue(name, out result);
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        dynDict[binder.Name.ToLower()] = value;
        return true;
    }
 }
}

Le code qui initialise et définit les membres/les propriétés de la classe

dynamic DynObj = new DynamicObjDictionary();
        DataSet ds = new DataSet();
        ds = GetObjectProperties() //returns dataset having the properties as key and value pair;
        if (ds.Tables["PropTable"].Rows.Count > 0)
        {
            foreach (DataRow dr in ds.Tables["PropTable"].Rows)
            {
                string KeyName = dr["KeyName"].ToString();
                string ValueName= dr["ValueName"].ToString();
                //---I want that in place of fldName the actual value from dr is added to the class - currently it returns DynObj.KeyName only.
                DynObj.KeyName = ValueName;
                //Means if current dr["KeyName"].ToString() has "Property1"
                //And dr["ValueName"].ToString() has "PropertyValue"
                //The DynObj should be like DynObj.Property1 = "PropertyValue" 
            }
        }

Et un autre problème est que je veux que toutes les propriétés à définir après l'initialisation décrite ci-dessus afin que je puisse y accéder comme un objet de classe qui est codé en dur. Code actuel ne se vend la dernière propriété c'est à dire la valeur de la dernière ligne de la base de données.

Pourquoi n'utilisez-vous pas un ExpandoObject ?
Si vous faites comme cela, comment allez-vous accéder à ces propriétés plus tard? Vous auriez alors besoin de savoir le KeyName, mais si vous le savez déjà, pourquoi ne pas simplement utiliser un dictionnaire?
Toutes vos valeurs seront des chaînes?
la classe devrait être sérialisable et de l'utiliser pour le retour json pour webservice donc, le fait de savoir KeyName n'est pas un sujet de préoccupation.
pourquoi ne pas utiliser un nu dictionnaire? la plupart json sérialiseurs savez exactement ce que vous voulez dire que si vous passez un dictionnaire...

OriginalL'auteur Cyberpks | 2013-12-16