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; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д