0
votes

Comment désérialiser une chaîne json spécifique en modèle ASP.NET MVC?

J'ai une chaîne json comme celle-ci:

public class MyModel
{
    public string Name { get; set; }
    public string Symbol { get; set; }
    public string Price { get; set; }
    public double Percent_change_1h { get; set; }
    public double Percent_change_24h { get; set; }
    public long Market_cap { get; set; }
    public DateTime Last_updated { get; set; }
}

Comment puis-je la désérialiser en modèles comme celui-ci:

{
    "data": [
        {
            "id": 1,
            "name": "Bitcoin",
            "symbol": "BTC",
            ...
            "quote": {
                "USD": {
                    "price": 9283.92,
                    "volume_24h": 7155680000,
                    "percent_change_1h": -0.152774,
                    "percent_change_24h": 0.518894,
                    "market_cap": 158055024432,
                    "last_updated": "2018-08-09T22:53:32.000Z"
                },
                "BTC": {
                    "price": 1,
                    "volume_24h": 772012,
                    "percent_change_1h": 0,
                    "percent_change_24h": 0,
                    "percent_change_7d": 0,
                    "market_cap": 17024600,
                    "last_updated": "2018-08-09T22:53:32.000Z"
                }
            }
        },
        // objects like previous from which i need the data
    ],
    "status": {
        "timestamp": "2018-06-02T22:51:28.209Z",
        ...
    }
}

Les noms de champs dans le modèle est le même que les noms de clé dans la chaîne json.

Je suis nouveau en C # et je n'ai pas trouvé d'informations utiles sur ma question, en particulier à cause de cette structure de chaîne json spécifique. Je serai heureux si vous me dirigez de bons liens à ce sujet.


1 commentaires

Lorsque vous avez une chaîne json et que vous souhaitez la convertir en classes de modèle. Copiez ensuite ce json et accédez à une classe en C # et cliquez sur le menu Edition du haut> Collage spécial> Coller Json en tant que classes. Il générera un modèle pour votre chaîne json.


3 Réponses :


1
votes

Le modèle semble être quelque chose comme ça.

public class Model
{
   public List<Datum> data { get; set; }
   public Status status { get; set; }
}

public class Status
{
    public DateTime timestamp { get; set; }
}

public class Datum
{
    public int id { get; set; }
    public string name { get; set; }
    public string symbol { get; set; }
    public Quote quote { get; set; }
}
public class Quote
{
    public USD USD { get; set; }
   public BTC BTC { get; set; }
}
public class BTC
{
    public int price { get; set; }
    public int volume_24h { get; set; }
    public int percent_change_1h { get; set; }
    public int percent_change_24h { get; set; }
    public int percent_change_7d { get; set; }
    public int market_cap { get; set; }
    public DateTime last_updated { get; set; }
}

public class USD
{
    public double price { get; set; }
    public object volume_24h { get; set; }
    public double percent_change_1h { get; set; }
    public double percent_change_24h { get; set; }
    public object market_cap { get; set; }
    public DateTime last_updated { get; set; }
}

Vous pouvez également essayer de créer un modèle sur ( http://json2csharp.com/ ) en copiant votre chaîne json valide. S'il vous plaît laissez-moi savoir si cela aide


0 commentaires

1
votes
  • Conclusion: vous pouvez (manuellement), mais ce n'est probablement pas ce que vous recherchez.
  • Raison: votre modèle ne correspond pas à la structure JSON, donc "manuel"
  • Vous pouvez utiliser des outils facilement disponibles dans Visual Studio ou VS Code pour vous aider à créer le modèle approprié (par exemple, Coller JSON en tant que code )
  • Une fois le ou les modèles "appropriés" prêts, passez en revue JSON documentation pour la (dé) sérialisation .

0 commentaires

1
votes

J'ai dû corriger quelques erreurs de syntaxe sur votre json, donc la version corrigée est la suivante:

var obj = JsonConvert.DeserializeObject<Rootobject>(File.ReadAllText("object.json"));

Voici les classes de modèle C # correspondant au json précédent:

public class Rootobject
    {
        public Datum[] data { get; set; }
        public Status status { get; set; }
    }

    public class Status
    {
        public DateTime timestamp { get; set; }
    }

    public class Datum
    {
        public int id { get; set; }
        public string name { get; set; }
        public string symbol { get; set; }
        public Quote quote { get; set; }
    }

    public class Quote
    {
        public USD USD { get; set; }
        public BTC BTC { get; set; }
    }

    public class USD
    {
        public float price { get; set; }
        public long volume_24h { get; set; }
        public float percent_change_1h { get; set; }
        public float percent_change_24h { get; set; }
        public long market_cap { get; set; }
        public DateTime last_updated { get; set; }
    }

    public class BTC
    {
        public int price { get; set; }
        public int volume_24h { get; set; }
        public int percent_change_1h { get; set; }
        public int percent_change_24h { get; set; }
        public int percent_change_7d { get; set; }
        public int market_cap { get; set; }
        public DateTime last_updated { get; set; }
    }


0 commentaires