亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#版json數據解析示例分享

2020-01-24 02:45:14
字體:
來源:轉載
供稿:網友

JSON與XML的比較
◆可讀性
JSON和XML的可讀性相比較而言,由于XML提供輔助的標簽,更加適合人閱讀和理解。
◆文件大小與傳輸
XML允許使用方便的標簽,所以文件尺寸是要比JSON大的。而且JSON源于Javascript,所以天生的主戰場是Javascript與網絡,在這里,JSON有著XML無法趕超的優勢。

JSON語法
1. JSON 語法是 JavaScript 對象表示法語法的子集。

數據在名稱/值對中:名稱是字符串,使用雙引號表示。值可以是:數字(整數或浮點數),字符串(在雙引號中),數組(在方括號中),對象(在花括號中),true/false/null。
數據由逗號分隔:
花括號保存對象:對象可以包含各種數據,包括數組。
方括號保存數組:數字可以包含對象。
例如:

復制代碼 代碼如下:

{
    "employees": [
        {
            "firstName": "Bill",
            "lastName": "Gates"
        },
        {
            "firstName": "George",
            "lastName": "Bush"
        }
    ]
}

2. 如果JSON中含有轉義字符,則需要轉義。例如文件路徑中需要使用"http://"而不是"/"。例如:{ "file":"C://a.txt"}。

.NET操作JSON
JSON文件讀入到內存中就是字符串,.NET操作JSON就是生成與解析JSON字符串。操作JSON通常有以下幾種方式:
1. 原始方式:自己按照JSON的語法格式,寫代碼直接操作JSON字符串。如非必要,應該很少人會走這條路,從頭再來的。

2. 通用方式【★★★★★】:

這種方式是使用開源的類庫Newtonsoft.Json(下載地址http://json.codeplex.com/)。下載后加入工程就能用。通??梢允褂肑Object, JsonReader, JsonWriter處理。這種方式最通用,也最靈活,可以隨時修改不爽的地方。
(1)使用JsonReader讀Json字符串:

復制代碼 代碼如下:

string jsonText = @"{""input"" : ""value"", ""output"" : ""result""}";
JsonReader reader = new JsonTextReader(new StringReader(jsonText));

while (reader.Read())
{
    Console.WriteLine(reader.TokenType + "/t/t" + reader.ValueType + "/t/t" + reader.Value);
}

(2)使用JsonWriter寫字符串:

復制代碼 代碼如下:

StringWriter sw = new StringWriter();
JsonWriter writer = new JsonTextWriter(sw);
writer.WriteStartObject();
writer.WritePropertyName("input");
writer.WriteValue("value");
writer.WritePropertyName("output");
writer.WriteValue("result");
writer.WriteEndObject();
writer.Flush();
string jsonText = sw.GetStringBuilder().ToString();
Console.WriteLine(jsonText);

(3)使用JObject讀寫字符串:

復制代碼 代碼如下:

JObject jo = JObject.Parse(jsonText);
string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray();

 (4)使用JsonSerializer讀寫對象(基于JsonWriter與JsonReader):

數組型數據

復制代碼 代碼如下:

string jsonArrayText1 = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]";
JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1);
string ja1a = ja[1]["a"].ToString();
//或者
JObject o = (JObject)ja[1];
string oa = o["a"].ToString();

嵌套格式

復制代碼 代碼如下:

string jsonText = "{/"beijing/":{/"zone/":/"海淀/",/"zone_en/":/"haidian/"}}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string zone = jo["beijing"]["zone"].ToString();
string zone_en = jo["beijing"]["zone_en"].ToString();

自定義類Project

復制代碼 代碼如下:

Project p = new Project() { Input = "stone", Output = "gold" };
JsonSerializer serializer = new JsonSerializer();
StringWriter sw = new StringWriter();
serializer.Serialize(new JsonTextWriter(sw), p);
Console.WriteLine(sw.GetStringBuilder().ToString());

StringReader sr = new StringReader(@"{""Input"":""stone"", ""Output"":""gold""}");
Project p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Project));
Console.WriteLine(p1.Input + "=>" + p1.Output);

上面的代碼都是基于下面這個Project類定義:

復制代碼 代碼如下:

class Project
{
    public string Input { get; set; }
    public string Output { get; set; }
}

 此外,如果上面的JsonTextReader等類編譯不過的話,說明是我們自己修改過的類,換成你們自己的相關類就可以了,不影響使用。

3. 內置方式:使用.NET Framework 3.5/4.0中提供的System.Web.Script.Serialization命名空間下的JavaScriptSerializer類進行對象的序列化與反序列化,很直接。

復制代碼 代碼如下:

Project p = new Project() { Input = "stone", Output = "gold" };
 JavaScriptSerializer serializer = new JavaScriptSerializer();
 var json = serializer.Serialize(p);
 Console.WriteLine(json);
 var p1 = serializer.Deserialize<Project>(json);
 Console.WriteLine(p1.Input + "=>" + p1.Output);
 Console.WriteLine(ReferenceEquals(p,p1));
 

注意:如果使用的是VS2010,則要求當前的工程的Target Framework要改成.Net Framework 4,不能使用Client Profile。當然這個System.Web.Extensions.dll主要是Web使用的,直接在Console工程中用感覺有點浪費資源。
此外,從最后一句也可以看到,序列化與反序列化是深拷貝的一種典型的實現方式。

4. 契約方式:使用System.Runtime.Serialization.dll提供的DataContractJsonSerializer或者 JsonReaderWriterFactory實現。

復制代碼 代碼如下:

Project p = new Project() { Input = "stone", Output = "gold" };
DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType());
string jsonText;

using (MemoryStream stream = new MemoryStream())
{
    serializer.WriteObject(stream, p);
    jsonText = Encoding.UTF8.GetString(stream.ToArray());
    Console.WriteLine(jsonText);
}

using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText)))
{
    DataContractJsonSerializer serializer1 = new DataContractJsonSerializer(typeof(Project));
    Project p1 = (Project)serializer1.ReadObject(ms);
    Console.WriteLine(p1.Input + "=>" + p1.Output);
}

這里要注意,這里的Project類和成員要加相關的Attribute:

復制代碼 代碼如下:

[DataContract]
class Project
{
    [DataMember]
    public string Input { get; set; }
    [DataMember]
    public string Output { get; set; }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩国产丝袜美女| 久久久国产一区二区| 97国产精品人人爽人人做| 亚洲一区二区三区777| 国产一区二中文字幕在线看| 国产婷婷色综合av蜜臀av| 久久久精品在线| 欧美日韩精品在线观看| 欧美激情视频给我| 裸体女人亚洲精品一区| 亚洲精品视频免费| 欧美激情亚洲国产| 欧美成年人在线观看| 欧美激情精品久久久久久黑人| 国产一区二区在线免费视频| 国产69精品久久久久99| 国内外成人免费激情在线视频| 欧美中文在线视频| 日韩国产欧美精品一区二区三区| 中文字幕久热精品在线视频| 国产亚洲欧美日韩一区二区| 538国产精品一区二区在线| 欧美日韩激情美女| 国产欧美亚洲视频| 日韩免费在线看| 成人美女av在线直播| 在线色欧美三级视频| 日韩在线一区二区三区免费视频| 欧美性受xxxx白人性爽| 亚洲午夜久久久久久久| 91国产高清在线| 日韩在线观看视频免费| 国产精品电影网站| 78色国产精品| 欧美一区二区大胆人体摄影专业网站| 久久国产精品亚洲| 国产成人精品久久二区二区| 国产成人精品久久| 成人黄色网免费| 51ⅴ精品国产91久久久久久| 国产精品嫩草视频| 91av在线精品| 欧美精品在线视频观看| 亚洲激情国产精品| 97在线看免费观看视频在线观看| 国产噜噜噜噜噜久久久久久久久| 97久久精品人人澡人人爽缅北| 久久久久久久激情视频| 成人做爽爽免费视频| 最近2019年手机中文字幕| 久久人人爽人人爽人人片av高请| 欧美男插女视频| 日本道色综合久久影院| 亚洲三级免费看| 成人天堂噜噜噜| 国产v综合ⅴ日韩v欧美大片| 精品久久久久久久久国产字幕| 不卡伊人av在线播放| 亚洲天堂第二页| 亚洲美女精品久久| 成人欧美一区二区三区黑人| 久久天堂av综合合色| 国产日韩欧美中文| 国产精品嫩草视频| 日韩电影在线观看中文字幕| 久久精品免费电影| 欧美视频在线观看免费| 国产一区二区日韩| 欧美一级免费视频| 亚洲福利在线看| 国产高清视频一区三区| 国产成人亚洲综合青青| 国产日韩在线播放| 国产精品第2页| 欧美另类极品videosbestfree| 中文.日本.精品| 亚洲男人第一av网站| 国产精品69精品一区二区三区| 日韩欧美国产骚| 成人深夜直播免费观看| 欧美激情中文字幕乱码免费| 亚洲国产成人久久综合一区| 亚洲黄色www| 91免费看视频.| 久热精品视频在线观看| 欧美小视频在线观看| 亚洲黄色av女优在线观看| 日韩欧美a级成人黄色| 欧美一区二区三区艳史| 亚洲欧洲中文天堂| 日韩av在线播放资源| 原创国产精品91| 欧美电影《睫毛膏》| 亚洲高清久久久久久| 久久国产精彩视频| 色哟哟网站入口亚洲精品| 亚洲欧洲在线视频| 亚洲国产精品99久久| 性欧美在线看片a免费观看| 97久久精品在线| 欧美成人在线网站| 7777精品久久久久久| 97人洗澡人人免费公开视频碰碰碰| 国产精品久久久久国产a级| 91精品国产综合久久久久久久久| 国模极品一区二区三区| 国外日韩电影在线观看| 亚洲伊人久久综合| 久久这里只有精品99| 国产小视频国产精品| 国产在线拍揄自揄视频不卡99| 69av视频在线播放| 91精品国产高清久久久久久| 久久69精品久久久久久久电影好| 中文字幕久精品免费视频| 欧美极品少妇xxxxⅹ喷水| 欧美性猛交xxxx免费看| 国产在线观看精品一区二区三区| 日韩中文字幕视频在线| 久久久av网站| 欧美激情视频三区| 4p变态网欧美系列| 美女性感视频久久久| 成人午夜在线影院| 亚洲午夜精品视频| 欧美福利视频网站| 一本色道久久88亚洲综合88| 亚洲专区在线视频| 亚洲精品久久久久国产| 国产一区二区三区视频在线观看| 在线观看日韩欧美| 亚洲精品国精品久久99热| 久久精品视频在线观看| 亚洲亚裔videos黑人hd| 亚洲精品一区二区网址| 成人字幕网zmw| 色中色综合影院手机版在线观看| 全球成人中文在线| 日韩精品免费观看| 欧美电影在线观看网站| 中文字幕欧美精品日韩中文字幕| 亚洲国产天堂久久国产91| 91国在线精品国内播放| 国产啪精品视频网站| 4444欧美成人kkkk| 日韩理论片久久| 中文字幕日韩视频| 久久精品视频在线播放| 欧美—级高清免费播放| 亚洲精品视频在线播放| 中文字幕日韩精品有码视频| 久久久久国产精品一区| 亚州国产精品久久久| 久久久亚洲精品视频| 精品国产一区二区三区久久久狼| 中文字幕日韩精品在线| 久久这里只有精品99| 中文日韩电影网站| 精品日本高清在线播放| 91亚洲国产精品| 国产精品网红直播| 久久全球大尺度高清视频| 亚洲午夜性刺激影院| 9.1国产丝袜在线观看|