@Vimake

Ошибка при работе с json.net

Вот мой код

JObject test = JObject.Parse(auth_id);
             string access_token = (string)test["access_token"][1].ToString();
             textBox2.Text = access_token;

В auth_id

{"access_token":"0533","expires_in":0,"user_id":1}
Что не так. Ошибку в третей строчке

Ошибка была вида: проверьте значение на null

Попытался исправить так. Ошибка ушла, но теперь все данные пустые. Что делать?

string error = "";
     string user_id = "";
     string access_token = "";
     access_token = ((string)test["access_token"]) == null ? access_token : "";
     user_id = ((string)test["user_id"]) == null ? user_id : "";
     error = ((string)test["error"]) == null ? error : "";
  • Вопрос задан
  • 2827 просмотров
Пригласить эксперта
Ответы на вопрос 3
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Вы пытаетесь клиента web api писать и сохранять access token?
static async Task GetToken()
        {
            var client = new HttpClient();
            var pairs = new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string, string>("grant_type", "password"), //AUTH TYPE, not a valid user pass
                new KeyValuePair<string, string>("username", "username"), // username
                new KeyValuePair<string, string>("password", "userpass") //current valid user password
            };
            var content = new FormUrlEncodedContent(pairs);

            var response = client.PostAsync("http://localhost:12437/Token", content).Result;

            if (response.IsSuccessStatusCode)
            {
                StreamReader reader = new StreamReader(response.Content.ReadAsStreamAsync().Result);
                string json = reader.ReadLine();
               Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
                var tokensavefile = File.CreateText(@"/path/to/save/token");
                string at = "";
                values.TryGetValue("access_token", out at);
                tokensavefile.WriteLine(at);
                r.Close();
                //File.Encrypt(@"/path/to/save/token");
            }
        }


Ну и как эту фигню использовать:
static async Task GetVal()
        {
           var client = new HttpClient();
            List<string> bearer = File.ReadLines(@"/path/to/file/with/token").ToList();
            client.DefaultRequestHeaders.Add("Authorization", "bearer " + bearer.First());
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
           var response = client.GetAsync("http://localhost:12437/authorized/api/").Result; //b4a77b8d-bf41-e311-95b4-00248cc66523
 if (response.IsSuccessStatusCode)
            {
// Ну и понесся парсинг json'а.
// я вот сейчас воюю как раз - не стандартный обьект Json десериализовать
             }
else
{
// код возврата (не 200 ок), всё такое, развлекаемся с определением "почему не работает"
}
Ответ написан
dzedzinskiy
@dzedzinskiy
Full stack developer
auth_id это строка формата json? Если да - то назовите ее правильно. Возможно формат строки не соответствует json, в результате JObject.Parse не смог распарсить строку, в итоге строка access_token не будет существовать т.е. будет иметь значение null , т.к. нету элемента "access_token" в test , а вызвав метод ToStirng() вылетит exception по той причине что строка должна быть не null.

Разве сложно продебажить код ?
Ответ написан
agorshkov23
@agorshkov23
Программер
зачем JObject test ... ?
используйте dynamic test...

тем самым можно просто сделать:

dynamic test = JObject.Parse(@"{"access_token":"0533","expires_in":0,"user_id":1}");
var accessToken = test.access_token.ToString ();
var expiresIn = int.ParseInt (test.expires_in.ToString ());
var userId = int.ParseInt (test.user_id.ToString ());


Просто проверяйте переменные потом на null.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы