我有一个简单的 php 脚本,它在后端使用 json_encode 方法输出一个字符串数组。 它输出如下:
["8090123","8090456","8090789","8090321","8090654"]
现在,我想在我的 C# 代码中解析它,但我似乎无法正确解析它。
下面是我的 C# 代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
using (WebClient wc = new WebClient())
{
string myString = wc.DownloadString("https://magforex.biz/list.php");
string[] words = myString.Split(',');
for (var i = 0; i < words.Length; i++)
{
// i just hardcoded the index for now
Console.WriteLine(words[0]);
break;
}
Console.ReadLine();
}
}
}
}
代码运行良好,但它输出以下结果["8090123"
这不是我想要的。
抱歉,因为我刚刚开始使用 C#,对它的了解有限。
我想要的只是字符串8090123
以便以后可以进行比较。
感谢您提前提供帮助。
使用适当的 JSON 解析库(如 Newtonsoft.Json)将 JSON 字符串解析为静态类型的类模型:
string[] words = JsonConvert.DeserializeObject<string[]>(myString);
你只是错过了一个步骤:
string[] words = myString.Trim(new []{'[',']'}).Split(',');
老实说,除非您打算将JsonConvert
用于更复杂的对象图,否则在这种情况下使用 json 反序列化程序有点矫枉过正,恕我直言。
编辑:如果你不想要引号,你可以使用LINQ投影...
string[] words = myString.Trim(new []{'[',']'})
.Split(',')
.Select(s => s.Trim(new[]{'"'}).ToArray();
顺便说一句,我对 Json.NET 非常熟悉,并且多年来一直是ServiceStack的人。但我偏向于更简单的解决方案,因为,嗯,奥卡姆剃刀,对吧?
为什么不做显而易见的事情并对您的 JSON 输入数据进行 JSON 解码呢?使用 Newtonsoft.Json:
JsonConvert.DeserializeObject<string[]>(myString)
如果您不想使用 Newtonsoft 库,您可以使用 JavaScriptSerializer
将字符串转换为数组。添加using System.Web.Script.Serialization;
,然后:
string myString = wc.DownloadString("https://magforex.biz/list.php");
JavaScriptSerializer js = new JavaScriptSerializer();
string[] myArray = js.Deserialize<string[]>(myString);
您应该将其更改为word[i]开始,那么我不确定您要做什么。