Witam wszystkich ,

Model json, taki jak ten poniżej, powoduje powrót przez interfejs API.

 {
  "data": [
    {
      "countryStats": {
        "order": 2,
        "confirmedCount": 15679,
        "deathCount": 277,
        "recovryCount": 333,
        "name": "Türkiye"
      },
      "cityStats": [

      ]
    },
    {
      "countryStats": {
        "order": 1,
        "confirmedCount": 216722,
        "deathCount": 5138,
        "recovryCount": 8672,
        "name": "Amerika Birleşik Devletleri"
      },
      "cityStats": [
        {
          "order": 1,
          "confirmedCount": 84070,
          "deathCount": 1941,
          "recovryCount": 0,
          "name": "New York"
        },..

Pobieram te dane json za pomocą poniższego kodu.

static string GET(string url)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            try
            {
                WebResponse response = request.GetResponse();
                using (Stream responseStream = response.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
                    return reader.ReadToEnd();
                }
            }
            catch (WebException ex)
            {
                WebResponse errorResponse = ex.Response;
                using (Stream responseStream = errorResponse.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.GetEncoding("utf-8"));
                    String errorText = reader.ReadToEnd();
                    // log errorText
                }
                throw;
            }
        }

Oto dla mnie wyrażenie tekstowe. Chcę przypisać to wyrażenie tekstowe do mojego modelu, jak to zrobić.

Mój model

public class CountryStats
    {
        public int Order  { get; set; }
        public int ConfirmedCount { get; set; }
        public int DeathCount { get; set; }
        public int RecovryCount { get; set; }
        public string Name { get; set; }
        public List<CountryStats> CityStats { get; set; }
    }

Próbuję to przetłumaczyć w ten sposób

var result = JsonConvert.DeserializeObject<List<CountryStats>>(res);

Ale pojawia się błąd

enter image description here

0
Muhammet Caylak 2 kwiecień 2020, 17:22

3 odpowiedzi

Najlepsza odpowiedź

Musisz zmienić model na ten

public class BaseClass
{
    public List<CountryStats> Data { get; set; }
}
public class CountryStats
{
    public int Order  { get; set; }
    public int ConfirmedCount { get; set; }
    public int DeathCount { get; set; }
    public int RecovryCount { get; set; }
    public string Name { get; set; }
    public List<CountryStats> CityStats { get; set; }
}

Następnie deserializuj odpowiedź do BaseClass

var result = JsonConvert.DeserializeObject<BaseClass>(res);

Aktualizuj

Spróbuj tego, aby zdeserializować tureckie słowo

res = res.Replace("\"","'");
var result = JsonConvert.DeserializeObject<BaseClass>(res);

Lub

var result = HttpUtility.JavaScriptStringEncode(JsonConvert.DeserializeObject<BaseClass>(res));
2
Farhad Zamani 2 kwiecień 2020, 15:00

Problemem jest twój model. Powinien wyglądać jak poniżej.

public class CountryStatsCollection
{
    public List<ContryStats> Data { get; set }
}

public class CountryStats
    {
        public int Order  { get; set; }
        public int ConfirmedCount { get; set; }
        public int DeathCount { get; set; }
        public int RecovryCount { get; set; }
        public string Name { get; set; }
        public List<CountryStats> CityStats { get; set; }
    }
1
Patrick Mcvay 2 kwiecień 2020, 14:30

Oprócz innych odpowiedzi, jeśli nie masz pewności, że niektóre pola mogą być puste lub nie, pomoże to:

public partial class Welcome
{
    [JsonProperty("data", NullValueHandling = NullValueHandling.Ignore)]
    public List<Datum> Data { get; set; }
}

public partial class Datum
{
    [JsonProperty("countryStats", NullValueHandling = NullValueHandling.Ignore)]
    public CountryStats CountryStats { get; set; }

    [JsonProperty("cityStats", NullValueHandling = NullValueHandling.Ignore)]
    public List<object> CityStats { get; set; }
}

public partial class CountryStats
{
    [JsonProperty("order", NullValueHandling = NullValueHandling.Ignore)]
    public long? Order { get; set; }

    [JsonProperty("confirmedCount", NullValueHandling = NullValueHandling.Ignore)]
    public long? ConfirmedCount { get; set; }

    [JsonProperty("deathCount", NullValueHandling = NullValueHandling.Ignore)]
    public long? DeathCount { get; set; }

    [JsonProperty("recovryCount", NullValueHandling = NullValueHandling.Ignore)]
    public long? RecovryCount { get; set; }

    [JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
    public string Name { get; set; }
}

Następnie możesz go deserializować:

var result = JsonConvert.DeserializeObject<Welcome>(res);
1
Sina Hoseinkhani 2 kwiecień 2020, 14:40