Почему этот анонимный тип не десериализован должным образом с помощью 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);