Как я могу разобрать строку JSON в .Net object, используя Json.Net ?

#c# #windows-phone-7 #json.net

#c# #windows-phone-7 #json.net

Вопрос:

Строка, которую я хочу разобрать:

 [
    {
    id: "new01"
    name: "abc news"
    icon: ""
    channels: [
    {
    id: 1001
    name: "News"
    url: "http://example.com/index.rss"
    sortKey: "A"
    sourceId: "1"
    },
    {
    id: 1002
    name: "abc"
    url: "http://example.com/android.rss"
    sortKey: "A"
    sourceId: "2"
    } ]
    },
{
    id: "new02"
    name: "abc news2"
    icon: ""
    channels: [
    {
    id: 1001
    name: "News"
    url: "http://example.com/index.rss"
    sortKey: "A"
    sourceId: "1"
    },
    {
    id: 1002
    name: "abc"
    url: "http://example.com/android.rss"
    sortKey: "A"
    sourceId: "2"
    } ]
    }
]
  

Комментарии:

1. Я пытался прочитать весь документ, но безуспешно: D

2. В созданный вами объект или в JSONObject?

Ответ №1:

Ваш JSON на самом деле не JSON — вам нужны запятые после полей:

 [
    {
    id: "new01",
    name: "abc news",
    icon: "",
    channels: [
    {
    id: 1001,
       ....
  

Предполагая, что вы это сделали и что вы используетеJSON.NET, тогда вам понадобятся классы для представления каждого из элементов — основных элементов в основном массиве и дочерних элементов «Канала».

Что-то вроде:

     public class Channel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string SortKey { get; set; }
        public string SourceId { get; set; }            
    }

    public class MainItem
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public string Icon { get; set; }
        public List<Channel> Channels { get; set; }
    }
  

Поскольку существует несоответствие между соглашениями об именовании элементов C # и именами JSON, вам нужно будет украсить каждый элемент сопоставлением, чтобы сообщить анализатору JSON, как называются поля json:

     public class Channel
    {
        [JsonProperty("id")]
        public int Id { get; set; }
        [JsonProperty("name")]
        public string Name { get; set; }
        [JsonProperty("sortkey")]
        public string SortKey { get; set; }
        [JsonProperty("sourceid")]
        public string SourceId { get; set; }            
    }

    public class MainItem
    {
        [JsonProperty("id")]
        public string Id { get; set; }
        [JsonProperty("name")]
        public string Name { get; set; }
        [JsonProperty("icon")]
        public string Icon { get; set; }
        [JsonProperty("channels")]
        public List<Channel> Channels { get; set; }
    }
  

После того, как вы сделали это, вы можете разобрать строку, содержащую ваш JSON, следующим образом:

 var result = JsonConvert.DeserializeObject<List<MainItem>>(inputString);
  

Комментарии:

1. Спасибо, я попробую ваш способ и сообщу результат. Спасибо Дамиану.

Ответ №2:

да, это JsonConvert.DeserializeObject (строка json)

попробуйте использовать JsonConvert.SerializeObject (объект) для создания JSON.