簡體   English   中英

在 C# UWP 中從 PHP 解析 Json_encoded 數組

[英]Parse Json_encoded array from PHP in C# UWP

我使用 C# 開發了一個 UWP 應用程序,這連接了一個 PHP WebService,這個 Web 服務返回一個使用 json_encode 函數編碼的數組,我無法在我的 UWP 應用程序中解析這個 json 字符串,請幫忙

1:PHP代碼

$aCli[]=  array("CAT"=>"OK","MSG"=>"SESION-OK","EXTRA"=>array("ID"=>"$spID","NOM"=>"$spNom"));
echo json_encode($aCli);

2:使用postman的結果是:

[{"CAT":"OK","MSG":"SESION-OK","EXTRA":{"ID":"3","NOM":"CHARLS"}}]

3. 從 C# 使用 Async Task 的結果是:

"[{\"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 是一個數組的表示,而不是一個對象。

如果您可以使用Newtonsoft (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);
    }
}

嗯..

您可以使用Newtonsoft直接反序列化 JSON 字符串。 根據您的要求,您需要制作數據模型。

[{"CAT":"OK","MSG":"SESION-OK","EXTRA":{"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文檔。

問題在於字符串開頭和結尾的括號“[]”,

你應該像這樣修剪它們:

' YOUR_JSON_STRING = YOUR_JSON_STRING.trim('[',']');

然后解析下面的json字符串:

'動態結果 = JsonConvert.DeserializeObject(YOUR_JSON_STRING)'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM