eliasum
@eliasum
cd ..

Десериализация json в C# с помощью Newtonsoft.Json.dll?

Здравствуйте. Есть ответ от сервера в формате json такого вида:

{
"user":{"ip":"192.168.216.11","login":"andi2222","number":12345},
"items":{
"1":{"name":"aaa","number":"","producer":"","measure":"24","suodID":"","foxproID":""},
"2":{"name":"bbb","number":"","producer":"","measure":"24","suodID":"","foxproID":""},
"3":{"name":"ccc","number":"","producer":"","measure":"24","suodID":"","foxproID":""}},
"measures":{
"1":{"name":"ddd","title":"eee"},
"2":{"name":"fff","title":"ggg"},
"3":{"name":"hhh","title":"iii"}},
"number1":{
"1":{"name":"1999","description":"jjj"},
"2":{"name":"2000","description":"kkk"},
"3":{"name":"2001","description":"lll"}},
"number2":{
"1":{"parent":"1","name":"2001","title":"mmm","description":"nnn"},
"2":{"parent":"1","name":"2002","title":"ooo","description":"ppp"},
"3":{"parent":"1","name":"2003","title":"qqq","description":"rrr"}}
}

Ранее мне встречались json типа

{"user":{"ip":"192.168.216.11","login":"andi2222","number":12345}}

Такой тип я десериализовал следующим образом:

Dictionary userArray = new Dictionary(); // словарь пользователей

///
/// Класс преобразования json для получения данных user
///
public class userClass
{
public string ip { get; set; }
public string login { get; set; }
public int number { get; set; }
}

// парсить полученный json с информацией о пользователях:
userArray = JsonConvert.DeserializeObject>(iJson);

А как можно десериализовать данный json?
  • Вопрос задан
  • 2913 просмотров
Решения вопроса 1
Kubatai
@Kubatai
Техник-программист
Опишите некий класс Answer(произвольное название), в котором будут хранится свойства с такими же именами и типами, как в вашем json, и при десериализации ссылайтесь на этот класс вот так:
Answer answer= JsonConvert.DeserializeObject<Answer>(iJson);

Для быстрого преобразования json-данных в классы c# можно воспользоваться данным онлайн-сервисом:
json2csharp.com

Описания классов json от сервиса выше
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
//    using QuickType;
//
//    var data = GettingStarted.FromJson(jsonString);
//
// For POCOs visit quicktype.io?poco
//
namespace QuickType
{
    using System;
    using System.Net;
    using System.Collections.Generic;

    using Newtonsoft.Json;

    public partial class GettingStarted
    {
        [JsonProperty("measures")]
        public Measures Measures { get; set; }

        [JsonProperty("number2")]
        public Number2 Number2 { get; set; }

        [JsonProperty("items")]
        public Items Items { get; set; }

        [JsonProperty("number1")]
        public Number1 Number1 { get; set; }

        [JsonProperty("user")]
        public User User { get; set; }
    }

    public partial class Measures
    {
        [JsonProperty("2")]
        public OtherThe1 The2 { get; set; }

        [JsonProperty("1")]
        public OtherThe1 The1 { get; set; }

        [JsonProperty("3")]
        public OtherThe1 The3 { get; set; }
    }

    public partial class OtherThe1
    {
        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("title")]
        public string Title { get; set; }
    }

    public partial class Number2
    {
        [JsonProperty("2")]
        public OtherOtherOtherThe1 The2 { get; set; }

        [JsonProperty("1")]
        public OtherOtherOtherThe1 The1 { get; set; }

        [JsonProperty("3")]
        public OtherOtherOtherThe1 The3 { get; set; }
    }

    public partial class OtherOtherOtherThe1
    {
        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("description")]
        public string Description { get; set; }

        [JsonProperty("parent")]
        public string Parent { get; set; }

        [JsonProperty("title")]
        public string Title { get; set; }
    }

    public partial class Items
    {
        [JsonProperty("2")]
        public The1 The2 { get; set; }

        [JsonProperty("1")]
        public The1 The1 { get; set; }

        [JsonProperty("3")]
        public The1 The3 { get; set; }
    }

    public partial class The1
    {
        [JsonProperty("measure")]
        public string Measure { get; set; }

        [JsonProperty("number")]
        public string Number { get; set; }

        [JsonProperty("foxproID")]
        public string FoxproID { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("producer")]
        public string Producer { get; set; }

        [JsonProperty("suodID")]
        public string SuodID { get; set; }
    }

    public partial class Number1
    {
        [JsonProperty("2")]
        public OtherOtherThe1 The2 { get; set; }

        [JsonProperty("1")]
        public OtherOtherThe1 The1 { get; set; }

        [JsonProperty("3")]
        public OtherOtherThe1 The3 { get; set; }
    }

    public partial class OtherOtherThe1
    {
        [JsonProperty("description")]
        public string Description { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }
    }

    public partial class User
    {
        [JsonProperty("login")]
        public string Login { get; set; }

        [JsonProperty("ip")]
        public string Ip { get; set; }

        [JsonProperty("number")]
        public long Number { get; set; }
    }


    public partial class GettingStarted
    {
        public static GettingStarted FromJson(string json) => JsonConvert.DeserializeObject<GettingStarted>(json, Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this GettingStarted self) => JsonConvert.SerializeObject(self, Converter.Settings);
    }

    public class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
        };
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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