2016-02-04 6 views
2

Скажем, у меня есть string, представляющий массив объектов в JSON форме:Deserialize JSON массив в массив строк

string s = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]"; 

То, что я хочу, это массив строк, каждая строка является строковое представление из JSON объект - NOT сам объект. Это должно выглядеть примерно так:

string[] s = new string[] 
{ 
    "{\"name\":\"Person1\"}", 
    "{\"name\":\"Person2\"}" 
}; 

1) Почти каждый поиск попытке подъезжает миллионы результатов о том, как просто десериализации JSON строку, используя (например) Json.NET. Это не что я хочу делать.

2) Я попытался построить класс, представляющий объекты, чтобы временно прокрутить десериализацию/сериализацию, сопоставляя каждую строку в массиве, но схема для объектов является переменной (поэтому поэтому мне нужно только строковое представление) ,

3) Я попытался выполнить несколько регулярных выражений, но моя строка JSON может содержать поля, содержащие строки JSON, как их значение (icky, но из-под моего контроля), и поэтому вложенные символы и т. Д. до того, как я решил попросить о помощи здесь.

Несомненно, это должно быть просто? У кого-нибудь есть указатели?

+0

Почему вы не хотите использовать Json.NET? Вы можете десериализовать массив JSON, а затем пропустить цикл и сериализовать каждый объект в массиве на строку и поместить их в список или что у вас есть. – Sean

+0

Я думал, что десериализация «объекта» (а не класса, определяющего все ожидаемые поля), а затем сериализации, приведет к потере полей. Я рассмотрел это на мгновение в самом начале, а затем сразу отклонил эту идею как «явно не собирающуюся работать».Угадайте, что яйцо на моем лице :) –

ответ

2

Вам нужно будет десериализовать его, а затем сериализовать каждый объект самостоятельно. Например (с использованием Newtonsoft.Json):

string json = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]"; 

var objects = JsonConvert.DeserializeObject<List<object>>(json); 
var result = objects.Select(obj => JsonConvert.SerializeObject(obj)).ToArray(); 

Урожайность (как string[]):

{"name":"Person1"} 
{"name":"Person2"} 

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

+0

Я думал, что десериализация «object» (а не класса, определяющего все ожидаемые поля), а затем сериализации, приведет к потере полей. Я рассмотрел это на мгновение в самом начале, а затем сразу отклонил эту идею как «явно не собирающуюся работать». Угадайте, что яйцо на моем лице :) Спасибо –

-4

Почему вы не просто использовать этот

string s = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]"; 

string[] t = s.Split(','); 

Я попробовал. Он просто дает вам строковый массив, как вы этого хотите.

+0

', но моя строка JSON может содержать поля, содержащие строки JSON, как их значение' - не будет работать – Rob

+0

@Rob Похоже, вы не видели, что ожидается в строке строкового массива [] s = новая строка [] { "{\" name \ ": \" Person1 \ "}", "{\" name \ ": \" Person2 \ "}" }; – HappyDeveloper

+0

Я определенно посмотрел на ожидаемые результаты. Даже игнорируя тот факт, что он упомянул о запятых, может присутствовать в json (и, следовательно, не может просто расщепляться на ','), ваш код все равно будет возвращать '[{" name' вместо '{" name' и 'Person2}]' вместо 'Person2}' – Rob

0
string s = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]"; 
var Json = JsonConvert.DeserializeObject<List<object>>(s); 
string[] Jsonn = Json.Select(x => x.ToString()).ToArray(); 

Response from [] Jsonn

[] Jsonn возвращает массив строк, а не массив объектов с JObject отформатирован.

Надеюсь, что это вам поможет.

Смежные вопросы