Désérialiser du JSON vers un objet dynamique C# ?

Désérialiser du JSON vers un objet dynamique C# ?


Source : Stack Overflow

Si vous acceptez d’avoir une dépendance envers l’assembly System.Web.Helpers, vous pouvez utiliser la classe Json :

dynamic data = Json.Decode(json);

Elle est incluse avec le framework MVC en tant que téléchargement supplémentaire au framework .NET 4. N’oubliez pas de donner un vote positif à Vlad si c’est utile ! Cependant, si vous ne pouvez pas garantir que l’environnement client inclut cette DLL, alors continuez la lecture.

Une approche de désérialisation alternative est suggérée ici. J’ai légèrement modifié le code pour corriger un bug et l’adapter à mon style de codage. Tout ce dont vous avez besoin est ce code et une référence à System.Web.Extensions depuis votre projet :

using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;

public sealed class DynamicJsonConverter : JavaScriptConverter
{
    public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
    {
        if (dictionary == null)
            throw new ArgumentNullException("dictionary");

        return type == typeof(object) ? new DynamicJsonObject(dictionary) : null;
    }

    public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override IEnumerable<Type> SupportedTypes
    {
        get { return new ReadOnlyCollection<Type>(new List<Type>(new[] { typeof(object) })); }
    }

    #region Nested type: DynamicJsonObject

    private sealed class DynamicJsonObject : DynamicObject
    {
        private readonly IDictionary<string, object> _dictionary;

        public DynamicJsonObject(IDictionary<string, object> dict

*(Réponse tronquée)*