最近看了很多的C# JSON数据解析,但是呢台通俗了,根本不适合初学者,尤其是不了解这个语言初学者,无疑是雪上加霜。下面根据我的经验给大家带来一个最简单的C# JSON数据解析。我这里用的post请求,当然了Get请求道理也是一样的。
1.首先新建一个WINForm项目,命名为Demos。
2.然后在项目中添加一个类
默类名为class.cs,把它改为HttpUtils.cs,改完以后点击添加既可。
3.然后打开我们新创建的(HttpUtils.cs)类,这个类是(POST请求)以及(GET请求) 内容替换在HttpUnits.cs中,替换完保存既可。如果引用完不好使的话或者出现报错那么肯定是你的namespace 的名字不对你只要把你的Demos改为你项目的namespace 后面的名称既可使用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
namespace Demos
{
public class HttpUtils
{
public static string Get(string Url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Proxy = null;
request.KeepAlive = false;
request.Method = "GET";
request.ContentType = "application/json; charset=UTF-8";
request.AutomaticDecompression = DecompressionMethods.GZip;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
return retString;
}
public static string Post(string Url, string Data)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
byte[] bytes = Encoding.UTF8.GetBytes(Data);
request.ContentType = "application/json";
request.ContentLength = bytes.Length;
Stream myResponseStream = request.GetRequestStream();
myResponseStream.Write(bytes, 0, bytes.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
return retString;
}
}
}
4.将下面两个dll文件放在你项目文件第二层的Demos文件夹中既可。
连接如下:链接: https://pan.baidu.com/s/1-PBM8yqTN2ReDR55eNrHsw 提取码: txvs
在你项目节目中的解决方案中找到(引用),然后右键点击找到添加引用,将你的文件指定到你Demos中既可
摁住Ctrl点击你的两个文件既可
5然后.开始我们真正解析了,首先大家打开这个链接 http://www.bejson.com,然后在JSON相关中,打开Json在线编译器。将最左侧的代码拷贝(直接Ctrl+A既可)。在JSON相关中打开JSON压缩转义,将我们的代码复制进去压缩并转义既可。大家记住转义完不要关闭这个网址,一会我们用到。
讲到这里的时候,配置文件都加进去了,为什么要解析别人的JSON,因为这个是针对没有URL连接的人做本地解析准备的。
1.第一步点击项目界面最上方的视图,在视图中找到工具箱,添加一个Button按钮,然后将它Content里面的名字改为数据拉取
2.双击你刚才创建的Button按钮,在你的Button按钮中进行代码写入,首先获取我们的URL,第一步我们获取到了URL并且把它放在了我们的Data中,Data_里面呢就是把我们拿到的JSON url通过GET给拉取到了,因为我们用HttpUtils是一个封装好的类,所以我们直接引用既可。
string Data = "http://172.16.128.65:8040/a1/sadad/S1/char/wast";
string Data_str = HttpUtils.Get(Data);
3.上面就是把URL拿到了,但是很多人是本地的TXT文件,那么我们将他直接按照我们刚才的流程把json内容压缩转义既可,现在将我们刚才压缩转义好的JSON数据拷贝出来(Ctrl+A)再(Ctrl+C)。
string Data_str = "{\"name\":\"BeJson\",\"url\":\"http://www.bejson.com\",\"page\":88,\"isNonProfit\":true,\"address\":{\"street\":\"科技园路.\",\"city\":\"江苏苏州\",\"country\":\"中国\"},\"links\":[{\"name\":\"Google\",\"url\":\"http://www.google.com\"},{\"name\":\"Baidu\",\"url\":\"http://www.baidu.com\"},{\"name\":\"SoSo\",\"url\":\"http://www.SoSo.com\"}]}";
JObject Data_new = (JObject)JsonConvert.DeserializeObject(Data_str);
JArray JSON = JArray.Parse(Data_new["links"].ToString());
4.上面呢我们就是把本地的JSON数据做了一个解析,首先我们把JSON数据放在了Data_str中,在有URL的时候它直接等于HttpUtils.Get里面的内容就可以了。在拿到这条数据以后第一步我们做了一个Object的转换,因为我们的JSON数据是一个对象里面,第二步我们又做了Jarray转换到了我们的links中,links在我们这是一个数组。
5.然后我们在D盘根目录新建一个Route的文件夹,在项目中也定义一下,顺便新建出我们的TXT文档,代码如下。
static string Path = "D:\\Route\\";
Path代表我们的Route文件夹路径
string SelectedPath = null;
string newTxtPath = SelectedPath + Path + "Demos_Data.txt"; //创建txt文件
StreamWriter json_Data = new StreamWriter(newTxtPath, false, Encoding.Default); //实例化StreamWriter
6.定义一个SelectedPath。它加上文件的路径在加上我们TXT文件名字既可这样我们就创建了一个本地TXT文本。
接下来我们把数据解析出来,并且存入到本地TXT文本中,代码如下:
foreach (JObject Analysis1 in JSON)
{
json_Data.WriteLine("==================================================" + "\r");
json_Data.WriteLine(Analysis1["name"].ToString() + "\r");
json_Data.WriteLine(Analysis1["url"].ToString() + "\r");
}
json_Data.Flush();
json_Data.Close();
7.将我们这段代码放置在第3.下面既可。之前我们通过Object转换进入到了Json第一层,然后我们通过Jarray进入到了links数组里面。foreach循环里面呢是我们的将links数组里面可视化到TXT中。因为一些的Object,以及jarray未定义,所以我们,通过报错可以添加一下Using。详细代码如下。
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Demos
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
static string Path = "D:\\Route\\";
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
//string Data = "http://172.16.128.65:8040/a1/sadad/S1/char/wast";
// string Data_str = HttpUtils.Get(Data);
string SelectedPath = null;
string newTxtPath = SelectedPath + Path + "Demos_Data.txt"; //创建txt文件
StreamWriter json_Data = new StreamWriter(newTxtPath, false, Encoding.Default); //实例化StreamWriter
string Data_str = "{\"name\":\"BeJson\",\"url\":\"http://www.bejson.com\",\"page\":88,\"isNonProfit\":true,\"address\":{\"street\":\"科技园路.\",\"city\":\"江苏苏州\",\"country\":\"中国\"},\"links\":[{\"name\":\"Google\",\"url\":\"http://www.google.com\"},{\"name\":\"Baidu\",\"url\":\"http://www.baidu.com\"},{\"name\":\"SoSo\",\"url\":\"http://www.SoSo.com\"}]}";
JObject Data_new = (JObject)JsonConvert.DeserializeObject(Data_str);
JArray JSON = JArray.Parse(Data_new["links"].ToString());
foreach (JObject Analysis1 in JSON)
{
json_Data.WriteLine("==================================================" + "\r");
json_Data.WriteLine(Analysis1["name"].ToString() + "\r");
json_Data.WriteLine(Analysis1["url"].ToString() + "\r");
}
json_Data.Flush();
json_Data.Close();
}
}
}
以下就是解析出来的数据了,如果你还想往下解析,根据变量,以及数组解析既可。希望对大家有帮助。