C # десериализация строки из нескольких массивов с json-строкой в ​​явном виде для List <string> - PullRequest
0 голосов
/ 25 апреля 2019

у меня есть json-строка, или чуть больше что-то вроде "строки массивов":

"[  
   {  
      "type":"radio-group",
      "label":"Radio-Button-Gruppe",
      "name":"radio-group-1556028993486",
      "className":"iCheck",
      "values":[  
         {  
            "label":"aaaaaaa",
            "value":"aaaaaaa"
         },
         {  
            "label":"bbbbbbbbb",
            "value":"bbbbbbbbb"
         },
         {  
            "label":"cccccccccccc",
            "value":"cccccccccccc"
         }
      ]
   }
],
[  
   ...
],
[  
   {  
      "type":"header",
      "label":"Überschrift"
   }
]"

Теперь я хочу иметь List<string> каждого массива в этой строке. Что-то вроде:

List<string> x[0] = "{  
          "type":"radio-group",
          "label":"Radio-Button-Gruppe",
          "name":"radio-group-1556028993486",
          "className":"iCheck",
          "values":[  
             {  
                "label":"aaaaaaa",
                "value":"aaaaaaa"
             },
             {  
                "label":"bbbbbbbbb",
                "value":"bbbbbbbbb"
             },
             {  
                "label":"cccccccccccc",
                "value":"cccccccccccc"
             }
          ]
       }"

Какой лучший способ сделать это?

Я уже опробовал JsonConvert.DeserializeObject<IEnumerable<string>>(), но моя проблема в том, что он хочет десериализовать мои файлы в объект. Но я хочу сохранить их в виде строки и добавить в мой список.

Зачем мне нужен список строк для каждого массива? Потому что я использую json-строки внутри массивов для визуализации формы. каждый массив показывает вам страницу формы, а json - это данные для рендеринга этой формы. Чтобы отобразить эту форму, мне нужно пройти через все эти массивы и отобразить в ней json для каждой страницы.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019
var json = "yourjson"; 

var jsonnew = "[" + json+ "]";

var list = JsonConvert.DeserializeObject<dynamic>(jsonnew);

var result = new List<string>();

foreach (var item in list)
{
  var str = JsonConvert.SerializeObject(item);
   result.Add(str);
}

Вы тоже можете использовать это.

1 голос
/ 25 апреля 2019

Вы можете использовать JsonConvert.DeserializeObject<IEnumerable<JToken>>(json), где json - это каждый из ваших массивов верхнего уровня.Затем вы можете перебрать результаты и использовать .ToString() для каждого объекта JToken.

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

var json = @"[  
   {
      ""type"":""radio-group"",
      ""label"":""Radio-Button-Gruppe"",
      ""name"":""radio-group-1556028993486"",
      ""className"":""iCheck"",
      ""values"":[
         {  
            ""label"":""aaaaaaa"",
            ""value"":""aaaaaaa""
         },
         {
            ""label"":""bbbbbbbbb"",
            ""value"":""bbbbbbbbb""
         },
         {
            ""label"":""cccccccccccc"",
            ""value"":""cccccccccccc""
         }
      ]
   }
]";
var arrays = new[] { json };

var objectsAsStrings = new List<string>();
foreach (var array in arrays)
{
    var tokens = JsonConvert.DeserializeObject<IEnumerable<JToken>>(array);

    foreach (var token in tokens)
    {
        objectsAsStrings.Add(token.ToString());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...