title: HttpClient.GetStringAsync is returning a "Result" object?
body: <p>I am trying to retrieve a JSON list from my own API with the GetStringAsync method.
  when I get it it returns as a "Result" object instead of just a string ? </p>
  
  <p>Then I am trying to Deserialize the JSON array to a list but recieve an error .</p>
  
  <p>This is how the returned string in the DEBUGGER looks from the HttpCLient.GetStringAsync :</p>
  
  <pre><code>"{\"Result\":[{\"id\":92,\"name\":\"Chris Hemsworth\",\"birthDate\":\"1983-8-11\",\"role\":\"Producer\",\"originalList\":null},{\"id\":90,\"name\":\"Jennifer Aniston\",\"birthDate\":\"1969-2-11\",\"role\":\"Producer\",\"originalList\":null},{\"id\":40,\"name\":\"Edward Norton\",\"birthDate\":\"1969-8-18\",\"role\":\"Writer\",\"originalList\":null}],\"Id\":71,\"Exception\":null,\"Status\":5,\"IsCanceled\":false,\"IsCompleted\":true,\"CreationOptions\":0,\"AsyncState\":null,\"IsFaulted\":false}"
  </code></pre>
  
  <p>the Exception im getting when trying to convert the JSON object to string:</p>
  
  <pre><code>Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[BuisnessLogic.Actor]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List&lt;T&gt;) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.Path 'Result', line 1, position 10.'
  </code></pre>
  
  <p><strong>UPDATE:</strong></p>
  
  <p>Here is the code:</p>
  
  <pre><code>var celebrities = JsonConvert.DeserializeObject&lt;List&lt;Actor&gt;&gt;(await client.GetStringAsync($"{serverAddress}/values/{GET_CELEBS_COMMAND}"));
  </code></pre>
  
  <p>the Actor class:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using System.Threading.Tasks;
  
  namespace BuisnessLogic
  {
      public class Actor
      {
          public int id { get; set; }
          public string name { get; set; }
          public string birthDate { get; set; }
          public string role { get; set; }
          public List&lt;Actor&gt; originalList { get; set; }
  
          public Actor(string name, string birthDate, string role)
          {
              this.name = name;
              this.birthDate = birthDate;
              this.role = role;
          }
  
          public Actor()
          {
  
          }
  
          public override string ToString()
          {
              return "Person: " + id + "" + name + " " + birthDate + " " + role;
          }
  
      }
  }
  </code></pre>
  
  <p><strong>EDIT 2 :</strong></p>
  
  <p>The Controller:</p>
  
  <pre><code>  using BuisnessLogic;
  
  using System.Web.Mvc;
  
  namespace WebApplication12.Controllers
  {
      public class ValuesController : Controller
      {
          public ILogic _Ilogic;
          public ValuesController(ILogic logic)
          {
              _Ilogic = logic;
  
          }
  
          // GET api/values
  
          public ActionResult GetActors()
          {
              return Json(_Ilogic.GetAllActorsAsync(), JsonRequestBehavior.AllowGet);
          }
  
      }
  }
  </code></pre>
  
  <p>The data management class :</p>
  
  <pre><code>using Newtonsoft.Json;
  using System;
  using System.Collections.Generic;
  using System.IO;
  using System.Configuration;
  using System.Collections.Concurrent;
  using System.Threading.Tasks;
  using System.Linq;
  
  
  namespace BuisnessLogic
  {
      public class Logic : ILogic
      {
          static string filePath;
          private static ConcurrentDictionary&lt;string, Actor&gt; originalList;
          const string BACKUP = @"D:\backup.txt";
  
          static Logic()
          {
              originalList = new ConcurrentDictionary&lt;string, Actor&gt;();
              filePath = ConfigurationManager.AppSettings["tempList"];
              File.Copy(filePath, BACKUP, true);
              SaveOriginal();
          }
  
  
  
          public async static Task&lt;List&lt;Actor&gt;&gt; GetCelebritiesInner()
          {
              return originalList.Values.ToList();
          }
  
          public async Task&lt;List&lt;Actor&gt;&gt; GetAllActorsAsync()
          {
              return await GetCelebritiesInner();
          }
  
  
  
  
          // Try to read the data from the Json and initialize it. if failed , initialize with whatever it got. return 
          private static List&lt;Actor&gt; ReadActorsFromJson(string json)
          {
              List&lt;Actor&gt; celebListReadFromFile;
              try
              {
  
                  var celebJson = File.ReadAllText(json);
                  celebListReadFromFile = JsonConvert.DeserializeObject&lt;List&lt;Actor&gt;&gt;(celebJson);
  
              }
              catch (Exception ex)
              {
                  celebListReadFromFile = new List&lt;Actor&gt;();
                  // Empty list/whatever it got in it
              }
              return celebListReadFromFile;
          }
  
          public async Task RemoveActorAsync(string name)
          {
  
              if (originalList.TryRemove(name, out Actor removedActor))
              {
                  var jsonToWrite = JsonConvert.SerializeObject(await GetCelebritiesInner());
  
                  try
                  {
  
                      File.WriteAllText(filePath, jsonToWrite);
                  }
                  catch (Exception ex)
                  {
                      //Unable to remove due to an error.
  
                  }
              }
          }
  
          public async Task ResetAsync()
          {
  
              UpdateFile();
          }
  
          //Saving the actor, adding the name as key &amp; object as value.
          public static void SaveOriginal()
          {
              foreach (var currCeleb in ReadActorsFromJson(filePath))
              {
                  originalList.TryAdd(currCeleb.name, currCeleb);
              }
          }
  
          public static void UpdateFile()
          {
              File.WriteAllText(filePath, string.Empty);
              var text = File.ReadAllText(BACKUP);
              File.WriteAllText(filePath, text);
          }
      }
  }
  </code></pre>
  
  <p>The update method that goes to the uri and gets the string :</p>
  
  <pre><code>public async void update()
      {
          var b = await client.GetStringAsync($"{serverAddress}/values/{GET_CELEBS_COMMAND}");
  
          var celebrities = JsonConvert.DeserializeObject&lt;List&lt;Actor&gt;&gt;(b);
          foreach (Actor actor in celebrities)
          {
              actorBindingSource.Add(actor);
          }
      }
  </code></pre>