Une autre solution pour résoudre ce problème (en fonction de votre situation) consiste à utiliser l'effet de levier L'interface de Newtonsoft.Json ExpandoObjectConverter
Classe de convertisseur JSON .
Sérialisez votre objet en JSON, puis désérialisez-le sous la forme d'un fichier ExpandoObject
en un dynamic
à l'aide du convertisseur :
Person person = new Person("Sam", "Lewis");
var personJson = JsonConvert.SerializeObject(person);
dynamic personExpando =
JsonConvert.DeserializeObject<ExpandoObject>(personJson, new ExpandoObjectConverter());
personExpando.Dob = "1/1/1900";
personExpando.Address = "777 Pearly Gates Dr.";
Le nouvel objet que vous obtiendrez aura les propriétés telles que vous les avez ajoutées :
{
"FirstName": "Sam",
"LastName": "Lewis",
"Dob": "1/1/1900",
"Address": "777 Pearly Gates Dr."
}
Il convient toutefois de noter que la version originale de la person
est inchangé ; nous n'avons pas du tout modifié cet objet.
Les mises en garde habituelles concernant la sérialisation JSON s'appliquent, votre kilométrage peut donc varier, mais si vos champs sont correctement sérialisables et que votre objet n'est pas profondément imbriqué, cela ne devrait pas poser de problème.
Soit dit en passant, vous devez absolument développer ou créer un contrat adapté pour les champs de votre objet au lieu d'utiliser ceci dans pratiquement tous les cas. Cela sera plus robuste, plus facile à maintenir et vous évitera les bogues et les erreurs liées au type qui peuvent survenir avec les solutions de contournement.
Cela dit, il arrive que les choses ne soient pas aussi nettes, et il peut donc être utile de disposer d'une telle échappatoire dans des situations exceptionnelles, mais il ne faut pas l'utiliser sans raison valable.
0 votes
Ceci devrait aider, j'espère gamedev.net/topic/
0 votes
Duplication possible de Ajouter dynamiquement des propriétés à une classe