Newtonsoft.Json JArray в JObject - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Весь день бился, и гуглил, так ничего и не нашел. Никак не могу получить JObject из JArray. При попытке преобразования выдает ошибку -
Листинг программы
  1. Не удается неявно преобразовать тип "Newtonsoft.Json.Linq.JArray" в "Newtonsoft.Json.Linq.JObject"
Дело в том, что от сервера JSON приходит по-разному - либо с фигурными скобками {}, из которого получается JObject, либо с квадратными [], из которого получается JArray. А функция, которая парсит JSON, должна возвращать JObject. Пока есть такой код, но выдает ошибку
Листинг программы
  1. Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject.
Листинг программы
  1. public static JObject json_decode(string json)
  2. {
  3. JObject obj = new JObject();
  4. JArray arr;
  5. try
  6. {
  7. obj = JObject.Parse(json);
  8. }
  9. catch
  10. {
  11. try
  12. {
  13. arr = JArray.Parse(json);
  14. foreach (var item in arr)
  15. {
  16. obj.Add(item);
  17. }
  18. }
  19. catch
  20. {
  21. Core.error("Error parse JSON, data:\r\n" + json);
  22. }
  23. }
  24. return obj;
  25. }
Похоже, поторопился, и создал не в том разделе тему. Если так, то просьба перенести
Пока решил проблему таким костылем:
Листинг программы
  1. int i = 0;
  2. foreach (var item in arr)
  3. {
  4. obj.Add(new JProperty(i.ToString(), item));
  5. i++;
  6. }
Если есть более правильное решение, то был бы благодарен за него.

Решение задачи: «Newtonsoft.Json JArray в JObject»

textual
Листинг программы
  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         string s1 = "{"Value": 12}";
  6.         string s2 = "[1,2,3]";
  7.  
  8.         var d1 = JToken.Parse(s1);
  9.         var d2 = JToken.Parse(s2);
  10.  
  11.         Print(d1);
  12.         Print(d2);
  13.     }
  14.  
  15.     private static void Print(JToken token)
  16.     {
  17.         switch (token)
  18.         {
  19.             case JObject obj:
  20.                 Console.WriteLine(obj);
  21.                 break;
  22.             case JArray array:
  23.                 Console.WriteLine(string.Join(";", array));
  24.                 break;
  25.         }
  26.     }
  27. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут