Сериализация / десериализация Wot Json API

#c# #json #serialization #deserialization

#c# #json #сериализация #десериализация

Вопрос:

У меня есть следующий Json от : https://www.mywot.com/wiki/API

 {
    "google.com": {
        "target": "google.com",
        "0": [94, 73],
        "1": [94, 73],
        "2": [94, 73],
        "4": [93, 67],
        "categories": {
            "501": 99,
            "301": 48,
            "304": 5
        }
    },
    "yahoo.com": {
        "target": "yahoo.com",
        "0": [94, 75],
        "1": [94, 75],
        "2": [94, 75],
        "4": [93, 69],
        "categories": {
            "501": 99,
            "301": 16,
            "304": 11
        }
    }
}
  

Я хотел бы использовать модель C # MVC Json.net для сериализации и десериализации Json.
Я пытался использовать следующую модель, но у меня возникли 2 проблемы:

  1. Название веб-сайта является переменной (google.com , yahoo.com )
  2. Ключами категорий являются числа (модели MVC не допускают использования числа в качестве ключа).

 public class Categories
{
    public int 401 { get; set; }
    public int 501 { get; set; }
}

public class Website 
{
    public string target { get; set; }
    public List<int> 0 { get; set; }
    public List<int> 1 { get; set; }
    public List<int> 2 { get; set; }
    public List<int> 4 { get; set; }
    public Categories categories { get; set; }
}

public class RootObject
{
    public Website domain_name { get; set; }
} 
  

Ответ №1:

Итак, ваш json очень грязный. И вы не можете задать имя для переменной типа 0,1,2,3. В этом случае вам нужно использовать [JsonProperty("HERE_IS_PROPERTY_NAME")] атрибут.

Ниже приведен код, который работает и анализирует ваш json.

  class Program
    {
        static void Main(string[] args)
        {
            string json = "{"google.com":{"target":"google.com","0":[94,73],"1":[94,73],"2":[94,73],"4":[93,67],"categories":{"501":99,"301":48,"304":5}},"yahoo.com":{"target":"yahoo.com","0":[94,75],"1":[94,75],"2":[94,75],"4":[93,69],"categories":{"501":99,"301":16,"304":11}}}";

            Dictionary<string, dynamic> dictionary_data = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(json);
            List<Website> sites = new List<Website>();
            foreach (var item in dictionary_data)
            {
                string data = Convert.ToString(item.Value);
                data = data.Replace("rn", string.Empty); ;
                Website site = JsonConvert.DeserializeObject<Website>(data);
                sites.Add(site);
            }
        }
    }


    public class Categories
    {
        [JsonProperty("401")]
        public int a { get; set; }
        [JsonProperty("501")]
        public int b { get; set; }
    }
    public class Website
    {
        public string target { get; set; }

        [JsonProperty("0")]
        public List<int> FirstList { get; set; }

        [JsonProperty("1")]
        public List<int> SecondList { get; set; }

        [JsonProperty("2")]
        public List<int> ThirdList { get; set; }

        [JsonProperty("4")]
        public List<int> FourList { get; set; }
        public Categories categories { get; set; }
    }

    public class RootObject
    {
        public Website domain_name { get; set; }
    }