Newtonsoft.Json JArray в JObject - C#
Формулировка задачи:
Здравствуйте. Весь день бился, и гуглил, так ничего и не нашел. Никак не могу получить JObject из JArray. При попытке преобразования выдает ошибку -
Дело в том, что от сервера JSON приходит по-разному - либо с фигурными скобками {}, из которого получается JObject, либо с квадратными [], из которого получается JArray. А функция, которая парсит JSON, должна возвращать JObject.
Пока есть такой код, но выдает ошибку
Если есть более правильное решение, то был бы благодарен за него.
Листинг программы
- Не удается неявно преобразовать тип "Newtonsoft.Json.Linq.JArray" в "Newtonsoft.Json.Linq.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;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д