Как десериализовать определенную строку json в модель ASP.NET MVC? - PullRequest
0 голосов
/ 17 марта 2019

У меня есть строка JSON, как это:

{
    "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",
        ...
    }
}

Как мне десериализовать его в такие модели:

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; }
}

Имена полей в модели совпадают с именами ключей в строке json.

Я новичок в C # и не смог найти никакой полезной информации по моему вопросу, особенно из-за этой конкретной структуры строк json. Я буду рад, если вы дадите мне хорошие ссылки по этому поводу.

Ответы [ 3 ]

1 голос
/ 17 марта 2019
  • Итог: вы можете (вручную), но это, вероятно, не то, что вы ищете.
  • Причина: ваша модель не соответствует структуре JSON, поэтому «ручная»
  • Вы можете использовать легкодоступные инструменты в Visual Studio или VS Code, чтобы помочь вам в создании правильной модели (например, Вставьте JSON в виде кода )
  • Как только вы подготовите "правильную" модель / и, перейдите к документации JSON для (де) сериализации .
1 голос
/ 17 марта 2019

Мне пришлось исправить некоторые синтаксические ошибки на вашем json, поэтому исправленная версия выглядит следующим образом:

{
    "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"
          }
        }
      }
    ],
    "status": {
        "timestamp": "2018-06-02T22:51:28.209Z"
    }
}

Вот классы моделей C #, соответствующие предыдущему json:

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; }
    }

Вотфрагмент кода, который вы можете использовать при десериализации вашего JSON.Этот фрагмент использует Json.NET -библиотеку.

var obj = JsonConvert.DeserializeObject<Rootobject>(File.ReadAllText("object.json"));
1 голос
/ 17 марта 2019

Модель выглядит примерно так.

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; }
}

Вы также можете попробовать создать модель (http://json2csharp.com/), скопировав допустимую строку json. Пожалуйста, дайте мне знать, если это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...