Désérialiser un bien comme un ExpandoObject à l'aide de JSON.NET
Par exemple, il y a un objet comme la suivante:
public class Container
{
public object Data { get; set; }
}
Et il est utilisé de cette façon:
Container container = new Container
{
Data = new Dictionary<string, object> { { "Text", "Hello world" } }
};
Si je désérialiser une chaîne JSON obtenu à partir de la sérialisation de l'exemple ci-dessus, le Data
bien, même si j'ai la ExpandoObjectConverter
, il n'est pas désérialisé comme un ExpandoObject
:
Container container = JsonConvert.Deserialize<Container>(jsonText, new ExpandoObjectConverter());
Comment puis-je désérialiser une propriété de la classe attribuée à un objet anonyme, ou au moins, pas de type de béton comme un ExpandoObject
?
EDIT:
Quelqu'un a répondu que je pouvais utiliser la dynamique de l'objet. Cela ne fonctionne pas pour moi. Je sais que je pourrais aller dans cette voie, mais ce n'est pas le cas, car j'ai besoin d'un ExpandoObject.
Merci.
EDIT 2:
Un autre utilisateur a répondu que je pouvais désérialiser une chaîne JSON dans un ExpandoObject
. Ce n'est pas le but de cette question. J'ai besoin de désérialiser un type de béton ayant une propriété dynamique. Dans la chaîne JSON cette propriété pourrait être un tableau associatif.
OriginalL'auteur Matías Fidemraizer | 2013-03-16
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
J'ai trouvé que cela m'a un
ExpandoObject
de l'appel à laDeserializeObject
. Je pense que le problème avec le code que vous avez fournie est que, tout en vous fournissant unExpandoObjectConverter
, vous demandezJson.Net
pour désérialiser unContainer
, donc j'imagine que leExpandoObjectConverter
n'est pas utilisé.Edit:
Si j'ai décorer la
Data
propriété avec[JsonConverter(typeof(ExpandoObjectConverter))]
et utilisez le code:Puis le
Data
propriété est désérialisé à unExpandoObject
, tandis queobj
est unContainer
.ExpandoObject
. Il est plus difficile que ça: j'ai besoin de désérialiser un type de béton qui a une propriété dynamique. Je veux que l'ensemble de la propriété comme unExpandoObject
quand désérialisé.Ah, donc dans votre exemple, le
Data
propriété serait désérialisé comme unExpandoObject
?Malheureusement, la
Data
propriété n'est pas désérialisé comme unExpandoObject
, mais unJContainer
(un JSON.NET type spécifique). J'ai besoin de l'ensemble de laData
comme unExpandoObject
.Voir mon edit.
Je ne sais pas pourquoi je n'ai pas reçu de notification. Je vais essayer cette!
OriginalL'auteur nick_w