Błąd przy pobieraniu danych z Web API

0

Witam,

Chce zwrócić obiekt z Web API i za każdym razem będzie to tylko jeden rekord, więc chce przypisać to do obiektu a nie to kolekcji.

 
            string ProfUrl = @"http://projekt.somee.com/api/ProfessorOfSubject/" + ProfessorsOfSubjectId.ToString();
            HttpClient httpClient = new HttpClient();
            Task<String> response = httpClient.GetStringAsync(ProfUrl);
            ProfessorsOfSubjects _professor = JsonConvert.DeserializeObjectAsync<ProfessorsOfSubjects>(response.Result).Result; 

Ostatnia linijka wywołuje błąd:
An exception of type 'System.AggregateException' occurred in mscorlib.ni.dll but was not handled in user code

Przy debugowaniu wszystko obiektem response jest wporządku:
response Id = 82, Status = RanToCompletion, Method = "{null}", Result = "[{"ProfessorsOfSubjectID":3,"ProfessorID":3,"SubjectID":1}]"

Kiedy zmienię na kolekcję wszystko jest ok:

ProfessorsOfSubjects _professor = JsonConvert.DeserializeObjectAsync<<ObservableCollection>ProfessorsOfSubjects>(response.Result).Result; 

Jak zrobić aby dane z JSona pochodzące od Web API były przypisane do obiektu a nie do kolekcji obiektów?

0

Miało być tak:

Kiedy zmienię na kolekcję wszystko jest ok:
ObservableCollection<ProfessorsOfSubjects> _professor = JsonConvert.DeserializeObjectAsync<<ObservableCollection>ProfessorsOfSubjects>(response.Result).Result;

1

No bo tablica jest zwracana z jednym elementem ale jednak tablica. Więc jak możesz to zmień Web API tak żeby zwracała jeden element co jest bardziej logicznie w momencie którym żądamy konkretnego elementu. Poza tym po co używać JsonConvert skoro dodałeś w NuGet: Install-Package Microsoft.AspNet.WebApi.Client to można to zrobić prościej:

internal class Program
{
   private static void Main(string[] args)
   {
      var professorsOfSubjectId = 3;
      using (var client = new HttpClient())
      {
         client.BaseAddress = new Uri("http://projekt.somee.com/");
         var apiUrl = string.Format("api/ProfessorOfSubject/{0}", professorsOfSubjectId);
         HttpResponseMessage response = client.GetAsync(apiUrl).Result;
         if (response.IsSuccessStatusCode)
         {
            //ObservableCollection<ProfessorsOfSubjects> professorsOfSubjects = response.Content.ReadAsAsync<ObservableCollection<ProfessorsOfSubjects>>().Result;
            ProfessorsOfSubjects professorsOfSubject = response.Content.ReadAsAsync<ObservableCollection<ProfessorsOfSubjects>>().Result[0];
            Console.WriteLine("ProfessorID: {0}", professorsOfSubject.ProfessorID);
         }
      }
   }
}
public class ProfessorsOfSubjects
{
   public int ProfessorsOfSubjectID { get; set; }
   public int ProfessorID { get; set; }
   public int SubjectID { get; set; }
}
0

Dzięki za odpowiedź :D Akurat nie ja robiłem Web API więc nawet nie wiedziałem.
Dopiero uczę się korzystać z Web API i szukałem różnych sposobów i JSonConvert zadziałał :D Teraz z pewnością będę posługiwał się tym od Ciebie.

0

To na początek najlepiej zacząć tutaj: http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client wszystko jest ładnie i przejrzyście opisane z przykładami na początek nadaje się idealnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1