Преобразование JArray of String из JObject в String Array в C#

У меня есть JSON, и часть его содержит строковые значения, такие как

 "parent_crumbs": [
    "Platforms",
    "STATS , EXPE , ESTAP",
    "Portal"
],

Я использую приведенный ниже код для чтения значения из объекта JSON.

 JObject _task; //parse the JSON to JOBJECT first               
 string values=    (string)_task["parent_crumbs"].ToString();

Это вернет строку с квадратными скобками и только кавычками.

Как я могу преобразовать это в массив строк в C#

Я могу удалить [и], а затем разделить на, но когда, присутствует в строковых элементах посередине, все предположения нарушатся. Итак, доступны ли какие-либо методы для чтения из JArray в String Array

Какую версию json.net/Newtonsoft.Json вы используете?

Nikolaus 19.10.2018 11:08

Последняя версия от NUGET

Sebastian 19.10.2018 11:11

Попробуйте IEnumerable<string > strings= _task[“parent_crumbs”].Select(s=>s.Value<string>();

Nikolaus 19.10.2018 11:23

Не могли бы вы решить вашу проблему?

Nikolaus 22.10.2018 09:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
4
7 646
1

Ответы 1

Вы не разместили полную строку json, поэтому предположим, что это примерно так:

{
    "id": 123,
     "parent_crumbs": [
        "Platforms",
        "STATS , EXPE , ESTAP",
        "Portal"
    ]
}

Вы можете создать модель C#, соответствующую этой структуре, следующим образом:

public class Data
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("parent_crumbs")]
    public List<string> ParentCrumbs { get; set; }
}

А затем десериализуйте строку json в экземпляр класса Data:

string json = @"{
    ""id"": 123,
     ""parent_crumbs"": [
        ""Platforms"",
        ""STATS , EXPE , ESTAP"",
        ""Portal""
    ]
}";

Data data = JsonConvert.DeserializeObject<Data>(json);

foreach (string crumb in data.ParentCrumbs)
{
    Console.WriteLine(crumb);
}

РЕДАКТИРОВАТЬ

Вместо десериализации всей строки json вы можете сделать следующее:

string json = @"{
    ""id"": 123,
     ""parent_crumbs"": [
        ""Platforms"",
        ""STATS , EXPE , ESTAP"",
        ""Portal""
    ]
}";

JObject data = JObject.Parse(json);
JToken crumbsToken = data.GetValue("parent_crumbs");
List<string> crumbs = JsonConvert.DeserializeObject<List<string>>(crumbsToken.ToString());

// alternative way to get the string values, as suggested by @BrianRogers
List<string> crumbs = crumbsToken.ToObject<List<string>>();

Это очень длинный JSON, и модель построения для всех свойств для меня непрактична. Мне нужно сделать около 60+ объектов недвижимости. Вот почему я делаю встроенное преобразование в строку или JArray

Sebastian 19.10.2018 11:17

@JibinMathew Я добавил больше деталей к своему ответу, пожалуйста, посмотрите.

Rui Jarimba 19.10.2018 11:25

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

SandRock 19.10.2018 13:05

@SandRock, круто, никогда не пробовал ТБХ - спасибо за информацию :-)

Rui Jarimba 19.10.2018 13:06

@RuiJarimba Не конвертируйте JToken в строку, чтобы развернуть и десериализовать ее. Вместо этого используйте .ToObject<T>() следующим образом: List<string> crumbs = crumbsToken.ToObject<List<string>>();

Brian Rogers 19.10.2018 17:15

@BrianRogers Я отредактировал свой ответ, спасибо за отзыв :-)

Rui Jarimba 19.10.2018 17:34

Другие вопросы по теме