Newtonsoft.Json JArray в JObject - C#

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

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

Здравствуйте. Весь день бился, и гуглил, так ничего и не нашел. Никак не могу получить JObject из JArray. При попытке преобразования выдает ошибку -
Не удается неявно преобразовать тип "Newtonsoft.Json.Linq.JArray" в "Newtonsoft.Json.Linq.JObject"
Дело в том, что от сервера JSON приходит по-разному - либо с фигурными скобками {}, из которого получается JObject, либо с квадратными [], из которого получается JArray. А функция, которая парсит JSON, должна возвращать JObject. Пока есть такой код, но выдает ошибку
Can not add Newtonsoft.Json.Linq.JValue to Newtonsoft.Json.Linq.JObject.
public static JObject json_decode(string json)
        {
            JObject obj = new JObject();
            JArray arr;
            try
            {
                obj = JObject.Parse(json);
            }
            catch
            {
                try
                {
                    arr = JArray.Parse(json);
                    foreach (var item in arr)
                    {
                        obj.Add(item);
                    }
                }
                catch
                {
                    Core.error("Error parse JSON, data:\r\n" + json);
                }
            }
            return obj;
        }
Похоже, поторопился, и создал не в том разделе тему. Если так, то просьба перенести
Пока решил проблему таким костылем:
                    int i = 0;
                    foreach (var item in arr)
                    {
                        obj.Add(new JProperty(i.ToString(), item));
                        i++;
                    }
Если есть более правильное решение, то был бы благодарен за него.

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

textual
Листинг программы
class Program
{
    static void Main(string[] args)
    {
        string s1 = "{"Value": 12}";
        string s2 = "[1,2,3]";
 
        var d1 = JToken.Parse(s1);
        var d2 = JToken.Parse(s2);
 
        Print(d1);
        Print(d2);
    }
 
    private static void Print(JToken token)
    {
        switch (token)
        {
            case JObject obj:
                Console.WriteLine(obj);
                break;
            case JArray array:
                Console.WriteLine(string.Join(";", array));
                break;
        }
    }
}

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


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

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

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