Я разрабатываю приложение UWP с использованием C #, это веб-служба PHP, этот веб-сервис возвращает массив, закодированный с помощью функции json_encode, я не могу разобрать эту строку json в моем приложении UWP, помогите, пожалуйста
1: PHP-код
$aCli[]= array("CAT"=>"OK","MSG"=>"SESION-OK","EXTRA"=>array("ID"=>"$spID","NOM"=>"$spNom"));
echo json_encode($aCli);
2: результат использования почтальона:
[{"CAT":"OK","MSG":"SESION-OK","EXTRA":{"ID":"3","NOM":"CHARLS"}}]
3. Результат с использованием Async Task из C #:
"[{\"CAT\":\"OK\",\"MSG\":\"SESION-OK\",\"EXTRA\":{\"ID\":\"3\",\"NOM\":\"CHARLS\"}}]"
4. Как десериализовать эту строку? Я пытаюсь использовать ее
using Windows.Data.Json;
5. Это код, используемый в это время
sJSON= await IniciarSesion();//this use async class to connect with webservice
JsonObject objJson = JsonObject.Parse(sJSON);//error is raised in this line
/*Json String is invalid*/
sCat = objJson["CAT"].GetString();
sMsg = objJson["MSG"].GetString();
Важный комментарий выше:
Ваш JSON — это представление массива, а не объекта.
ЕСЛИ ты можешь использовать Ньютонсофт (JSON.Net), вот в одну сторону, с зависимостью от JSON.Net
, не Windows.Data.Json
, Только тривиальная выборка, улучшайте по мере необходимости (нулевые проверки и т. Д.)
using System;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
var str = "[{\"CAT\":\"OK\",\"MSG\":\"SESION-OK\",\"EXTRA\":{\"ID\":\"3\",\"NOM\":\"CHARLS\"}}]";
var j = JArray.Parse(str);
var token = j[0];
//using dynamic to simplify sample, create/use your own type
var obj = token.ToObject<dynamic>();
Console.WriteLine(obj.CAT);
Console.WriteLine(obj.MSG);
Console.WriteLine(obj.EXTRA);
Console.WriteLine(obj.EXTRA.ID);
Console.WriteLine(obj.EXTRA.NOM);
}
}
Hth ..
Вы могли бы использовать Newtonsoft десериализовать строку JSON напрямую. Для вашего требования вам нужно сделать модель данных первой.
[{ «САТ»: «ОК», «MSG»: «Sesion-ОК», «ЭКСТРА»: { «ID»: «3», «NOM»: «Charls»}}]
public class Pet
{
public string Cat { get; set; }
public string Msg { get; set; }
public Extra Extra { get; set; }
}
public class Extra
{
public string Id { get; set; }
public string Nom { get; set; }
}
использование
private void Button_Click(object sender, RoutedEventArgs e)
{
var str = "[{\"CAT\":\"OK\",\"MSG\":\"SESION-OK\",\"EXTRA\":{\"ID\":\"3\",\"NOM\":\"CHARLS\"}}]";
var items = JsonConvert.DeserializeObject<List<Pet>>(str);
}
Для более вы могли бы сослаться Сериализация и десериализация JSON документация.