【问题标题】:Parse Json_encoded array from PHP in C# UWP在 C# UWP 中从 PHP 解析 Json_encoded 数组
【发布时间】:2018-06-14 14:03:41
【问题描述】:

我使用 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# 中的异步任务的结果是:

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

【问题讨论】:

  • 显示 IniciarSesion 代码。
  • 不确定这是否是问题所在,但您的 JSON 是数组的表示,而不是对象。您可以使用 JsonArray 而不是 JsonObject,也许(或者,更改您的 php 以仅返回对象)
  • 根据@James,将$aCli[] = blabla 替换为$aCli = blabla(json 编码对象),而不是一个对象的json 编码数组。
  • @YvesLeBorg 我需要编码数组,用于从我的应用程序的其他页面的表中列出记录

标签: c# php json uwp


【解决方案1】:

以上重要评论:

您的 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);
    }
}

第..

【讨论】:

    【解决方案2】:

    您可以使用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 文档。

    【讨论】:

      【解决方案3】:

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

      你应该像这样修剪它们:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-21
        • 1970-01-01
        • 1970-01-01
        • 2018-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        相关资源
        最近更新 更多