Невозможно получить значение после анализа Json в C# - PullRequest
0 голосов
/ 26 марта 2020

У меня есть строка Json, которая выглядит следующим образом.

{
"jkName": "This is Default Name",
"jkDate": "03-26-2021",
"jkAddress": "3rd Floor MPZ.",
"jkGadget": [{
        "value": "Ipad"
    },
    {
        "value": "Ipod"
    }

],
"jkFood": "Kadala curry"}

И я собираюсь проанализировать эту строку Json и l oop через нее, используя приведенный ниже код c#.

JObject rss = JObject.Parse(DefaultJson);

            foreach (var item in rss)
            {
                var abc = item;
            }

Когда я помещаю "item.key" в первый l oop, тогда я получаю "jkName". Это хорошо. Но в случае "item.Value" я получил ошибку. Я приложил изображение в ссылке ниже.

Пожалуйста, нажмите здесь, чтобы увидеть ошибку.

Как я могу получить значение, значит в первом l oop когда я go для значения, мне нужно получить «Это имя по умолчанию» относительно этого примера.

Ответы [ 3 ]

0 голосов
/ 26 марта 2020

Вы можете смоделировать ваш JSON как классы:

public class JkGadget
{
    public string Value { get; set; }
}

public class RootObject
{
    public string JkName { get; set; }
    public string JkDate { get; set; }
    public string JkAddress { get; set; }
    public List<JkGadget> JkGadget { get; set; }
    public string JkFood { get; set; }
}

Затем десериализовать, используя Json.NET и извлечь необходимое свойство:

var json = "{\"jkName\": \"This is Default Name\",\"jkDate\": \"03-26-2021\",\"jkAddress\": \"3rd Floor MPZ.\",\"jkGadget\": [{\"value\": \"Ipad\"},{\"value\": \"Ipod\"}],\"jkFood\": \"Kadala curry\"}";

var deserializedJson = JsonConvert.DeserializeObject<RootObject>(json);

var item = deserializedJson.JkName;

Console.WriteLine(item);
// This is Default Name
0 голосов
/ 26 марта 2020

Я буду использовать Простой объект, когда Json позволит это.
[JsonProperty("jkName")] Позвольте мне сопоставить плохо названное свойство значащему.

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

    [JsonProperty("jkDate")]
    public DateTime Date { get; set; }

    [JsonProperty("jkAddress")]
    public string Address { get; set; }

    [JsonProperty("jkGadget")]
    public List<Gadget> Gadgets { get; set; }

    [JsonProperty("jkFood")]
    public string Food { get; set; }
}

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

Тогда десериализация является простой:

var result =  JsonConvert.DeserializeObject<RootObject>(json);

И для доступа к значению:

Console.WriteLine(result.Name);
foreach(var stuff in result.Gadgets){
    Console.WriteLine(stuff.Name);
}

Live демо

0 голосов
/ 26 марта 2020

Попробуйте этот код (мой в порядке):

Newtonsoft.Json.LinqJObject rss = Newtonsoft.Json.LinqJObject.Parse("{\"jkName\": \"This is Default Name\",\"jkDate\": \"03-26-2021\",\"jkAddress\": \"3rd Floor MPZ.\",\"jkGadget\": [{\"value\": \"Ipad\"},{\"value\": \"Ipod\"}],\"jkFood\": \"Kadala curry\"}");

        foreach (var item in rss)
        {
            var abc = item.Value;
            Console.WriteLine(abc);
        }
...