在C#UWP中从PHP解析Json_encoded数组

时间:2018-01-04 19:18:08

标签: c# php json 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:使用邮递员的结果是:

[{"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();

3 个答案:

答案 0 :(得分:0)

上面的重要评论:

  

您的JSON是数组的表示,而不是对象。

如果,您可以使用Newtonsoft (JSON.Net),此处为one way, with dependency on 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);
    }
}

H个..

答案 1 :(得分:0)

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

有关详情,请参阅Serializing and Deserializing JSON文档。

答案 2 :(得分:0)

问题出在字符串开头和结尾的方括号'[]'

您应该像这样修剪它们

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

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

'动态结果= JsonConvert.DeserializeObject(YOUR_JSON_STRING)'