Десериализовать JSON с. NET - PullRequest
0 голосов
/ 19 марта 2020

Я использую RestSharp, чтобы сделать запрос.

Запрос возвращает JSON в следующем формате, и мне нужно его десериализовать. Прикрепленное изображение ниже, где вы можете лучше визуализировать

{
    "491a21c9dfba2befd28fd2b7b4222d09460eef1728b2f11": {
        "found": true,
        "signature": "MTU4NDU0NTc0NjAxNjo0OTFhMjFjOWRmmQwMzA4MjRmYjU4YjBjYmI3Yzg5NDYwZWVmMTcyOGIyZjExOjEsMiwzLDQsNSw2LDcsODphMjQ0ZDRiZDM3ZTA1NzRiZTJiODMwNGNhNzllNDkyNGNmOWM0NWE3MWM3NDZiMThjOGQ2N2U1YmY2Y2U2MmZk",
        "sectors": ["1", "2", "3", "4", "5", "6", "7", "8"]
    },
    "2e42dbd5df8e146eff500eb48e4c4daa6c4f11c": {
        "found": true,
        "signature": "MTU4NDU0NTc0NjAxNjoyZTQyZWE0M2U5ZjQ0MzBlMTQ2ZWZmNTAwZWI0OGU0YzRkYWE2YzRmMTFjOjEsMiw0LDUsNiw3LDg6YWU5NzA4YzdiZmZjM2RhOTU4NDg3MmEwYjc1OWIwZmZlZmRjMWZiNTJkZDcwNjcyZDZkYTZkN2Q3ZDFiYjQ4MA==",
        "sectors": ["1", "2", "4", "5", "6", "7", "8"]
    },
    "fef3ab0a8d09dc77bcb8cbd313d484253a92f09b9a": {
        "found": false,
        "signature": "MTU4NDU0NTc0NjAxNjpmZWYzYWIwYThkMDlkY2I5NzNlNjdjYjU3MDdjNTZmMzEwZDc3N2JjYjhjYmQzMTNkNDg0MjUzYTkyZjA5YjlhOjphMGQ1MDZlOWZiOTFmNmNiOWQ1MWIxYzM2YzYyODEzYjFiYjgzZDc3NWEzNDZhMWNjY2I5ZjQwYmVjYjU3NGY0",
        "sectors": []
    }
}

Я создал два класса

class UserInfo
{
    [JsonProperty("resultsInfo")]
    public Dictionary<string, ResultInfo> ResultsInfo { get; set; }
}

class ResultInfo
{
    [JsonProperty("_found")]
    public string Found { get; set; }


    [JsonProperty("_signature")]
    public string Signature { get; set; }


    [JsonProperty("sectors")]
    public IEnumerable<string> Sectors { get; set; }
}

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

var serializer = new JavaScriptSerializer();
var deserialize = serializer.Deserialize<UserInfo>(response.Content)

enter image description here

Может кто-нибудь сказать мне, как я могу решить проблему? Спасибо!

1 Ответ

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

Я бы порекомендовал использовать Newtonsoft.Json, однако приведенные ниже обновления также должны работать с JavaScriptSerializer.

Внесите несколько изменений, и вы сможете десериализовать json.

class ResultInfo
{
    public bool Found { get; set; }
    public string Signature { get; set; }
    public IEnumerable<string> Sectors { get; set; }
}

// using Newtonsoft.Json;
var result = JsonConvert.DeserializeObject< Dictionary<string, ResultInfo> >(json);

Изменения:

  • Десериализовать прямо в Dictionary<string, ResultInfo>. Вам не нужен класс-оболочка UserInfo, если ваш json не начинается следующим образом: { "resultsInfo": ...
  • Удалите теги [JsonProperty], так как некоторые из них были неправильными и не нужны для json Вы показали.
  • Обновление Found до bool.

Пример онлайн

...