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;
}
}
}