Невозможно десериализовать JSON в объект, используя C# - PullRequest
0 голосов
/ 18 марта 2020

Я был по этому вопросу все утро, и я не могу понять, что я делаю здесь неправильно.

Вот XML, с которым я работаю.

{
    "item1": "{\"id\":\"53553621-da48-47dd-bad6-6e9d2b3c785f\",\"auth_token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJDT0VMS0VSQFBPVU5EU0xBQlMuQ09NIiwianRpIjoiZjBlMjI3OTYtMTY4NC00MmRlLWE0ZDYtZDhiYmVlZmRmNmQ2IiwiaWF0IjoxNTg0NTU4ODg5LCJyb2wiOiJhcGlfYWNjZXNzIiwiaWQiOiI1MzU1MzYyMS1kYTQ4LTQ3ZGQtYmFkNi02ZTlkMmIzYzc4NWYiLCJuYmYiOjE1ODQ1NTg4ODgsImV4cCI6MTU4NDU2NjA4OCwiaXNzIjoid2ViQXBpIiwiYXVkIjoiYXBpLm1pbGxtYW5tdWx0aW1lZGlhLmNvbTo0MDQwIn0.dthKzyJRqtkanYNRWEkiqYf4yzQT_A9Qn-GkH5eNAwM\",\"expires_in\":7200}",
    "item2": "105"
}

item1 является стандартным токеном авторизации, который мне нужно вытащить и передать для выполнения вызовов API, мне нужен в основном этот auth_token. item2 - это настраиваемое поле, которое возвращается. По какой-то причине он выдает ошибку всякий раз, когда я пытаюсь десериализовать этот JSON в свой объект.

public class AuthToken
{
    public string id { get; set; }
    public string auth_token { get; set; }
    public int expires_in { get; set; }
}

public class Token
{
    public AuthToken item1 { get; set; }
    public string item2 { get; set; }
}

Вот код, который я десериализуем с

var t = JsonConvert.DeserializeObject<Token>(token,
                        new JsonSerializerSettings
                        {
                            NullValueHandling = NullValueHandling.Ignore
                        });

Ошибка Я получаю

Newtonsoft.Json.JsonSerializationException: 'Error converting value
ArgumentException: Could not cast or convert from System.String to MyAppName.AuthToken.

Любые идеи о том, что я делаю здесь не так?

1 Ответ

2 голосов
/ 18 марта 2020

Проблема в том, что AuthToken не является строкой.

Ваш токен хранится в виде строковых литералов.

Отредактируйте исходный код для строки make authtoken (а затем преобразуйте ее в AuthToken), или заставьте сериализатор сериализовать структуру данных AuthToken.

public class AuthToken
{
    public string id { get; set; }
    public string auth_token { get; set; }
    public int expires_in { get; set; }
}

public class Token
{
    public string item1{get; set;}
    private AuthToken _token;

    public AuthToken AuthToken{ get { return _token ?? _token= new AuthToken(item1);}}
    public string item2 { get; set; }
}

Вы должны сделать AuthToken ctor.

Или вы можете просто создать JsonConverter, который делает то, что вы хочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...