maysam_p82 Ответов: 1

Преобразование json в список ?


Привет, не могли бы вы сказать мне, пожалуйста, как преобразовать это в список? Я поощряю эту ошибку :
Необработанное исключение типа 'Newtonsoft.Json.JsonSerializationException' произошло в Newtonsoft.Json.Net20.dll

Дополнительные сведения: не удается десериализовать JSON-объект в тип System.Коллекции.Generic.List`1[App_Code.APIResult]'.
каждый раз, когда я хочу десериализовать ответ.
вот мой ответ:
{"status":"Ok","rows":[{"elements":[{"status":"Ok","duration":{"value":10,"text":""},"distance":{"value":62,"text":"۷۵ متر"}}]}],"origin_addresses":["35.724098,51.424491"],"destination_addresses":["35.724165,51.425121"]}


Что я уже пробовал:

public class APIResult
   {
         public class Duration
         {
             public int value { get; set; }
             public string text { get; set; }
         }

         public class Distance
         {
             public int value { get; set; }
             public string text { get; set; }
         }

         public class Element
         {
             public string status { get; set; }
             public Duration duration { get; set; }
             public Distance distance { get; set; }
         }

         public class Row
         {
             public IList<Element> elements { get; set; }
         }

         public class Example    //{"status":"Ok", "rows":[                 {                     "elements":                     [{"status":"Ok",                     "duration":{"value":11,"text":""},                     "distance":{"value":62,"text":"۷۵ متر"}}                 ]}             ],       "origin_addresses":["35.724098,51.424491"],      "destination_addresses":["35.724165,51.425121"]}          }
         {
             public string status { get; set; }
             public IList<Row> rows { get; set; }
             public IList<string> origin_addresses { get; set; }
             public IList<string> destination_addresses { get; set; }
         }



private bool RequestTimeTrip2()
       {
           if (!mapNRPTTCEventWinService.ReqListInfo(dt_Main))
           {
               //errLog
               return false;
           }
           string[] arrLatLon = null;
           string strResult = string.Empty;
           for (int i = 0; i < dt_Main.Rows.Count; i++)
           {
               arrLatLon = dt_Main.Rows[i]["Points"].ToString().Split('^');
               for (int j = 0; j < arrLatLon.Length - 1; j++)
               {
                   var url = "https://api.neshan.org/v1/distance-matrix?origins=" + arrLatLon[j].Split(',')[0] + "," + arrLatLon[j].Split(',')[1] + "&destinations=" + arrLatLon[j + 1].Split(',')[0] + "," + arrLatLon[j + 1].Split(',')[1];
                   HttpClient client = new HttpClient();
                   client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                   client.DefaultRequestHeaders.Add("Api-Key", "web.dSy4OSDOQtcMokSozr7qmAAvn55jSop5gX95PNTF");
                   var response = client.GetAsync(url).Result;
                   List<App_Code.APIResult> objApiResult = new List<APIResult>();
                   string result = response.Content.ReadAsStringAsync().Result;
                   // var responseString = new StreamReader(response.Content.ReadAsStreamAsync().Result).ReadToEnd();
                   StreamReader reader = new StreamReader(result);
                   result = reader.ReadToEnd();
                   objApiResult = Newtonsoft.Json.JsonConvert.DeserializeObject<List<APIResult>>(result);




                   //  objApiResult = (App_Code.APIResult)Newtonsoft.Json.JsonConvert.SerializeObject(result);
                   //List<App_Code.APIResult> lstResult = JsonConvert.DeserializeObject<List<App_Code.APIResult>>(responseString);
                   // var lobjResult = Newtonsoft.Json.JsonConvert.DeserializeObject<List<APIResult>>(responseString);
                   //var lobjResult = JsonConvert.DeserializeObject<APIResult>(responseString);
                   // var deserialized = JsonConvert.DeserializeObject<IEnumerable<App_Code.APIResult>>(response.Content.ReadAsStringAsync().ToString());
                   //  var lobjResult = Newtonsoft.Json.JsonConvert.DeserializeObject<List<APIResult1>>(responseString);
               }
           }
           return true;
       }

Richard Deeming

JSON, который вы показали, - это не список чего-либо. Это единственный объект, который, кажется, соответствует вашим Example вложенный класс.

Newtonsoft.Json.JsonConvert.DeserializeObject<APIResult.Example>(result)

1 Ответов

Рейтинг:
0

Graeme_Grant

У меня есть вспомогательный класс в моей статье Работа с JSON в C# и VB[^] что я проверил ваши классы и необработанный образец JSON на десериализацию и отлично работает. Вот мой тестовый код :

class Program
{
    static void Main(string[] args)
    {
        var rawJson = @"{""status"":""Ok"",""rows"":[{""elements"":[{""status"":""Ok"",""duration"":{""value"":10,""text"":""""},""distance"":{""value"":62,""text"":""۷۵ متر""}}]}],""origin_addresses"":[""35.724098,51.424491""],""destination_addresses"":[""35.724165,51.425121""]}";
        var result = JsonHelper.ToClass<Example>(rawJson);
    }
}

public class Duration
{
    public int value { get; set; }
    public string text { get; set; }
}

public class Distance
{
    public int value { get; set; }
    public string text { get; set; }
}

public class Element
{
    public string status { get; set; }
    public Duration duration { get; set; }
    public Distance distance { get; set; }
}

public class Row
{
    public IList<Element> elements { get; set; }
}

public class Example
{
    public string status { get; set; }
    public IList<Row> rows { get; set; }
    public IList<string> origin_addresses { get; set; }
    public IList<string> destination_addresses { get; set; }
}


public static class JsonHelper
{
    public static string FromClass<T>(T data, bool isEmptyToNull = false,
        JsonSerializerSettings jsonSettings = null)
    {
        string response = string.Empty;

        if (!EqualityComparer<T>.Default.Equals(data, default(T)))
            response = JsonConvert.SerializeObject(data, jsonSettings);

        return isEmptyToNull ? (response == "{}" ? "null" : response) : response;
    }

    public static T ToClass<T>(string data, JsonSerializerSettings jsonSettings = null)
    {
        var response = default(T);

        if (!string.IsNullOrEmpty(data))
            response = jsonSettings == null
                ? JsonConvert.DeserializeObject<T>(data)
                : JsonConvert.DeserializeObject<T>(data, jsonSettings);

        return response;
    }
}


Maciej Los

5ed!

Graeme_Grant

Спасибо! :)