Почему этот анонимный тип не десериализован должным образом с помощью JsonConvert.DeserializeAnonymousType?

У меня есть строка JSON:

{"response":{"token":"{\"token\":\"123\",\"id\":191}"}}

И затем у меня есть следующий код для десериализации его, но он возвращает ноль:

 var def = new
       {
           token = new { token = string.Empty, id= string.Empty }
        };

  var deserializedToken = JsonConvert.DeserializeAnonymousType(token, def);

deserializedToken нулевой

Вот более подробный пример, который я не могу заставить работать:

var def = new
            {
                code = string.Empty,
                message = string.Empty,
                url= string.Empty,
                token = new {token = string.Empty}
            };

            var response = JsonConvert.DeserializeAnonymousType(data, def);

            var innerDef = new { token= string.Empty, id= string.Empty };

            var deserializedInner = JsonConvert.DeserializeAnonymousType(response.token.token, innerDef);

1 ответ

Решение

Насколько я могу судить, здесь есть две проблемы:

  • У вас нет response свойство десериализации
  • Часть "token:123 id:191" на самом деле является строкой - значением внешнего token имущество

Так что если вы измените свой код на:

var def = new
{
    response = new { token = "" }
};

var deserializedToken = JsonConvert.DeserializeAnonymousType(json, def);
Console.WriteLine(deserializedToken);

тогда вы получите:

{ response = { token = {"token":"123","id":191} } }

Если вы также хотите десериализовать часть токена / идентификатора, вы можете сделать это с помощью:

var innerDef = new { token = "", id = "" };
var deserializedInner = JsonConvert.DeserializeAnonymousType
    (deserializedToken.response.token, innerDef);
Console.WriteLine(deserializedInner);

Это тогда печатает:

{ token = 123, id = 191 }
string jsonToken = @"{'response':{'token':{'token':'123','id':191}}}";
var def = new
{
    response = new
    {
        token = new { token = string.Empty, id = 0 }
    }
};

var deserializedToken = JsonConvert.DeserializeAnonymousType(jsonToken, def);
Другие вопросы по тегам