日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C#使用DataContractJsonSerializer来进行JSON解析

發(fā)布時(shí)間:2023/12/18 C# 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#使用DataContractJsonSerializer来进行JSON解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在使用DataContractJsonSerializer進(jìn)行解析之前,我們首先需要將兩個(gè)包引入進(jìn)來(lái):

using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;

接下來(lái)需要新建一個(gè)class,DataContractJsonSerializer可以將JSON字符串轉(zhuǎn)化為指定的class或者將class轉(zhuǎn)化為JSON字符串。

這次我接受的JSON數(shù)據(jù)格式為:

{ "ret": "0", "Isupdate": "1", "Newver": "V1.1.0" }

我們新建的class也要遵照上述格式,代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
?
namespace AutoUpdater_Client.Model
{
? ? //從更新服務(wù)器返回的更新信息
? ? [DataContract]
? ? class UpdateInfoJSON
? ? {
? ? ? ? //"{ \"ret\": \"0\", \"Isupdate\": \"1\", \"Newver\": \"V1.1.0\" }";
? ? ? ? //返回值,為0表示獲取信息成功
? ? ? ? [DataMember(Order = 0)]
? ? ? ? public int ret { get; set; }
? ? ? ? //是否需要更新,0表示不需要,1表示需要
? ? ? ? [DataMember(Order = 1)]
? ? ? ? public int Isupdate { get; set; }
? ? ? ? //最新版本號(hào)
? ? ? ? [DataMember(Order = 2)]
? ? ? ? public string Newver { get; set; }
?
? ? }
}
請(qǐng)注意上述class中的DataContract和DataMember這兩個(gè)屬性,因?yàn)镈ataContractJsonSerializer在進(jìn)行序列化的時(shí)候需要他們,所以一定要記得加上。
另外,這兩個(gè)屬性的使用也需要引入

System.Runtime.Serialization

接下來(lái)我們可以來(lái)寫解析的代碼了:

string result = "{ \"ret\": \"0\", \"Isupdate\": \"1\", \"Newver\": \"V1.1.0\" }";
//解析從服務(wù)端返回的JSON結(jié)果
var mStream = new MemoryStream(Encoding.Default.GetBytes(result));
var serializer = new DataContractJsonSerializer(typeof(UpdateInfoJSON));
UpdateInfoJSON updateInfo = (UpdateInfoJSON)serializer.ReadObject(mStream);
接下來(lái)就可以訪問(wèn)updateInfo中的各個(gè)屬性了,完成。
————————————————

//*************JSON-DataContractJsonSerializer解析

C#中使用JSON不需要使用第三方庫(kù),使用.NET Framwork3.5自帶的System.Runtime.Serialization.Json即可很好的完成JSON的解析。

關(guān)于JSON的入門介紹見(jiàn)(首頁(yè)的圖很形象):

http://www.json.org/

一、Using

需要添加引用:System.ServiceModel.Web 和 System.Runtime.Serialization,然后使用Using:

using?System.Runtime.Serialization.Json;
using?System.Runtime.Serialization;

?二、定義序列化的類

假如我們要轉(zhuǎn)化的JSON字符串格式為:

{
????"encoding":"UTF-8",
????"plug-ins":["python","c++","ruby"],
????"indent":{
????????"length":3,
????????"use_space":true
????}
}

?

然后編寫相應(yīng)的序列化的類,注意下面類加的Attribute:

[DataContract(Namespace?=?"http://coderzh.cnblogs.com")]
class?Config
{
????[DataMember(Order?=?0)]
????public?string?encoding?{?get;?set;?}
????[DataMember(Order?=?1)]
????public?string[]?plugins?{?get;?set;?}
????[DataMember(Order?=?2)]
????public?Indent?indent?{?get;?set;?}
}

[DataContract(Namespace?=?"http://coderzh.cnblogs.com")]
class?Indent
{
????[DataMember(Order?=?0)]
????public?int?length?{?get;?set;?}
????[DataMember(Order?=?1)]
????public?bool?use_space?{?get;?set;?}
}

三、對(duì)象轉(zhuǎn)化為JSON字符串

?

使用WriteObject方法:


var?config?=?new?Config(){
?????????????????????????encoding?=?"UTF-8",
?????????????????????????plugins?=?new?string[]{"python",?"C++",?"C#"},
?????????????????????????indent?=?new?Indent(){?length?=?4,?use_space?=?false}
?????????????????????????};
var?serializer?=?new?DataContractJsonSerializer(typeof(Config));
var?stream?=?new?MemoryStream();
serializer.WriteObject(stream,?config);

byte[]?dataBytes?=?new?byte[stream.Length];

stream.Position?=?0;

stream.Read(dataBytes,?0,?(int)stream.Length);

string?dataString?=?Encoding.UTF8.GetString(dataBytes);

Console.WriteLine("JSON?string?is:");
Console.WriteLine(dataString);

四、JSON字符串轉(zhuǎn)對(duì)象

使用ReadObject方法:

ReadObject

?五、輸出結(jié)果:

JSON?string?is:
{"encoding":"UTF-8","plugins":["python","C++","C#"],"indent":{"length":4,"use_space":false}}
Encoding?is:?UTF-8
plugins?is:?python
plugins?is:?C++
plugins?is:?C#
indent.length?is:?4
indent.use_space?is:?False

?

//***********使用List和Json格式相互轉(zhuǎn)化的總結(jié)

如Json格式[{"id":"1","name":"sara"},{"id":"2","name":"sara2"}]

自定義數(shù)據(jù)類型,用于List<>:

[DataContract]class Person {[DataMember]public int id;[DataMember]public string name;}

?

程序中使用:

首先加入引用:

using System.Runtime.Serialization.Json;
using System.Runtime.Serialization;
using System.Text;

代碼內(nèi)容:

class Program{static void Main(string[] args){//Product.GetAllSmartPhones();List<Person> nums = new List<Person>();nums.Add(new Person() { id=1,name="sara"});nums.Add(new Person() { id=1,name="sylar"});DataContractJsonSerializer json = new DataContractJsonSerializer(nums.GetType());string szJson = "";//序列化using (MemoryStream stream = new MemoryStream()){json.WriteObject(stream, nums);szJson = Encoding.UTF8.GetString(stream.ToArray());}Console.WriteLine(szJson);Console.ReadLine();}}

工程化時(shí),可以對(duì)自定義數(shù)據(jù)結(jié)構(gòu)重新定義一個(gè)類:

如:

public?class?TestListResult<T>?:?List<T>
????{
????????public?TestListResult()
????????{
????????????this.Successed?=?false;
????????????this.Message?=?"";
????????}
????????public?bool?Successed?{?get;?set;?}
????????public?string?Message?{?get;?set;?}
????}

使用時(shí)同上在一個(gè)文件里一樣

理解了以上原理,可以使用以下函數(shù)在項(xiàng)目中使用:

List<T>轉(zhuǎn)Json

?

[html]?view plaincopy

  • public?static?string?Obj2Json<T>(T?data)??
  • {??
  • ????try??
  • ????{??
  • ????????System.Runtime.Serialization.Json.DataContractJsonSerializer?serializer?=?new?System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType());??
  • ????????using?(MemoryStream?ms?=?new?MemoryStream())??
  • ????????{??
  • ????????????serializer.WriteObject(ms,?data);??
  • ????????????return?Encoding.UTF8.GetString(ms.ToArray());??
  • ????????}??
  • ????}??
  • ????catch??
  • ????{??
  • ????????return?null;??
  • ????}??
  • }??

  • Json轉(zhuǎn)List<T>

    ?

    [html]?view plaincopy

  • public?static?Object?Json2Obj(String?json,Type?t)??
  • {??
  • ????try??
  • ????{??
  • ????????System.Runtime.Serialization.Json.DataContractJsonSerializer?serializer?=?new?System.Runtime.Serialization.Json.DataContractJsonSerializer(t);??
  • ????????using?(MemoryStream?ms?=?new?MemoryStream(Encoding.UTF8.GetBytes(json)))??
  • ????????{??
  • ??????????????
  • ????????????return??serializer.ReadObject(ms);??
  • ????????}??
  • ????}??
  • ????catch??
  • ????{??
  • ????????return?null;??
  • ????}??
  • }??

  • DataTable 轉(zhuǎn)Json

    ?

    [html]?view plaincopy

  • public?static?string?DataTable2Json(DataTable?dt)??
  • {??
  • ????if?(dt.Rows.Count?==?0)??
  • ????{??
  • ????????return?"";??
  • ????}??
  • ???
  • ????StringBuilder?jsonBuilder?=?new?StringBuilder();??
  • ????//?jsonBuilder.Append("{");???
  • ????//jsonBuilder.Append(dt.TableName.ToString());????
  • ????jsonBuilder.Append("[");//轉(zhuǎn)換成多個(gè)model的形式??
  • ????for?(int?i?=?0;?i?<?dt.Rows.Count;?i++)??
  • ????{??
  • ????????jsonBuilder.Append("{");??
  • ????????for?(int?j?=?0;?j?<?dt.Columns.Count;?j++)??
  • ????????{??
  • ????????????jsonBuilder.Append("\"");??
  • ????????????jsonBuilder.Append(dt.Columns[j].ColumnName);??
  • ????????????jsonBuilder.Append("\":\"");??
  • ????????????jsonBuilder.Append(dt.Rows[i][j].ToString());??
  • ????????????jsonBuilder.Append("\",");??
  • ????????}??
  • ????????jsonBuilder.Remove(jsonBuilder.Length?-?1,?1);??
  • ????????jsonBuilder.Append("},");??
  • ????}??
  • ????jsonBuilder.Remove(jsonBuilder.Length?-?1,?1);??
  • ????jsonBuilder.Append("]");??
  • ????//??jsonBuilder.Append("}");??
  • ????return?jsonBuilder.ToString();??
  • }??

  • 單個(gè)對(duì)象轉(zhuǎn)JSON

    ?

    [html]?view plaincopy

  • public?static?T?Json2Obj<T>(string?json)???
  • {??
  • ????T?obj?=?Activator.CreateInstance<T>();??
  • ????using?(System.IO.MemoryStream?ms?=?new?System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))??
  • ????{??
  • ????????System.Runtime.Serialization.Json.DataContractJsonSerializer?serializer?=?new?System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());??
  • ????????return?(T)serializer.ReadObject(ms);??
  • ????}??
  • }??

  • 將函數(shù)封裝成類,更便于項(xiàng)目中引用:

    ?

    [html]?view plaincopy

  • public?class?JsonHelper??
  • ???{??
  • ???????///?<summary>??
  • ???????///?生成Json格式??
  • ???????///?</summary>??
  • ???????///?<typeparam?name="T"></typeparam>??
  • ???????///?<param?name="obj"></param>??
  • ???????///?<returns></returns>??
  • ???????public?static?string?GetJson<T>(T?obj)??
  • ???????{??
  • ???????????DataContractJsonSerializer?json?=?new?DataContractJsonSerializer(obj.GetType());??
  • ???????????using?(MemoryStream?stream?=?new?MemoryStream())??
  • ???????????{??
  • ???????????????json.WriteObject(stream,?obj);??
  • ???????????????string?szJson?=?Encoding.UTF8.GetString(stream.ToArray());???
  • ???????????????return?szJson;??
  • ???????????}??
  • ???????}??
  • ???????///?<summary>??
  • ???????///?獲取Json的Model??
  • ???????///?</summary>??
  • ???????///?<typeparam?name="T"></typeparam>??
  • ???????///?<param?name="szJson"></param>??
  • ???????///?<returns></returns>??
  • ???????public?static?T?ParseFromJson<T>(string?szJson)??
  • ???????{??
  • ???????????T?obj?=?Activator.CreateInstance<T>();??
  • ???????????using?(MemoryStream?ms?=?new?MemoryStream(Encoding.UTF8.GetBytes(szJson)))??
  • ???????????{??
  • ???????????????DataContractJsonSerializer?serializer?=?new?DataContractJsonSerializer(obj.GetType());??
  • ???????????????return?(T)serializer.ReadObject(ms);??
  • ???????????}??
  • ???????}??
  • ???}??
  • [html]?view plaincopy

  • ///?<summary>??
  • ???????///?反回JSON數(shù)據(jù)到前臺(tái)??
  • ???????///?</summary>??
  • ???????///?<param?name="dt">數(shù)據(jù)表</param>??
  • ???????///?<returns>JSON字符串</returns>??
  • ???????public?string?DataTableToJson(DataTable?dt)??
  • ???????{??
  • ???????????StringBuilder?JsonString?=?new?StringBuilder();??
  • ???????????if?(dt?!=?null?&&?dt.Rows.Count?>?0)??
  • ???????????{??
  • ???????????????JsonString.Append("{?");??
  • ???????????????JsonString.Append("\"TableInfo\":[?");??
  • ???????????????for?(int?i?=?0;?i?<?dt.Rows.Count;?i++)??
  • ???????????????{??
  • ???????????????????JsonString.Append("{?");??
  • ???????????????????for?(int?j?=?0;?j?<?dt.Columns.Count;?j++)??
  • ???????????????????{??
  • ???????????????????????if?(j?<?dt.Columns.Count?-?1)??
  • ???????????????????????{??
  • ???????????????????????????JsonString.Append("\""?+?dt.Columns[j].ColumnName.ToString()?+?"\":"?+?"\""?+?dt.Rows[i][j].ToString()?+?"\",");??
  • ???????????????????????}??
  • ???????????????????????else?if?(j?==?dt.Columns.Count?-?1)??
  • ???????????????????????{??
  • ???????????????????????????JsonString.Append("\""?+?dt.Columns[j].ColumnName.ToString()?+?"\":"?+?"\""?+?dt.Rows[i][j].ToString()?+?"\"");??
  • ???????????????????????}??
  • ???????????????????}??
  • ???????????????????if?(i?==?dt.Rows.Count?-?1)??
  • ???????????????????{??
  • ???????????????????????JsonString.Append("}?");??
  • ???????????????????}??
  • ???????????????????else??
  • ???????????????????{??
  • ???????????????????????JsonString.Append("},?");??
  • ???????????????????}??
  • ???????????????}??
  • ???????????????JsonString.Append("]}");??
  • ???????????????return?JsonString.ToString();??
  • ???????????}??
  • ???????????else??
  • ???????????{??
  • ???????????????return?null;??
  • ???????????}??
  • ???????}??

  • 表的轉(zhuǎn)化Json類:

    [html]?view plaincopy

  • public?static?class?JsonTableHelper??
  • ????{??
  • ????????///?<summary>???
  • ????????///?返回對(duì)象序列化???
  • ????????///?</summary>???
  • ????????///?<param?name="obj">源對(duì)象</param>???
  • ????????///?<returns>json數(shù)據(jù)</returns>???
  • ????????public?static?string?ToJson(this?object?obj)??
  • ????????{??
  • ????????????JavaScriptSerializer?serialize?=?new?JavaScriptSerializer();??
  • ????????????return?serialize.Serialize(obj);??
  • ????????}??
  • ??
  • ????????///?<summary>???
  • ????????///?控制深度???
  • ????????///?</summary>???
  • ????????///?<param?name="obj">源對(duì)象</param>???
  • ????????///?<param?name="recursionDepth">深度</param>???
  • ????????///?<returns>json數(shù)據(jù)</returns>???
  • ????????public?static?string?ToJson(this?object?obj,?int?recursionDepth)??
  • ????????{??
  • ????????????JavaScriptSerializer?serialize?=?new?JavaScriptSerializer();??
  • ????????????serialize.RecursionLimit?=?recursionDepth;??
  • ????????????return?serialize.Serialize(obj);??
  • ????????}??
  • ??
  • ????????///?<summary>???
  • ????????///?DataTable轉(zhuǎn)為json???
  • ????????///?</summary>???
  • ????????///?<param?name="dt">DataTable</param>???
  • ????????///?<returns>json數(shù)據(jù)</returns>???
  • ????????public?static?string?ToJson(DataTable?dt)??
  • ????????{??
  • ????????????Dictionary<string,?object>?dic?=?new?Dictionary<string,?object>();??
  • ??
  • ????????????int?index?=?0;??
  • ????????????foreach?(DataRow?dr?in?dt.Rows)??
  • ????????????{??
  • ????????????????Dictionary<string,?object>?result?=?new?Dictionary<string,?object>();??
  • ??
  • ????????????????foreach?(DataColumn?dc?in?dt.Columns)??
  • ????????????????{??
  • ????????????????????result.Add(dc.ColumnName,?dr[dc].ToString());??
  • ????????????????}??
  • ????????????????dic.Add(index.ToString(),?result);??
  • ????????????????index++;??
  • ????????????}??
  • ????????????return?ToJson(dic);??
  • ????????}??
  • ????}??

  • 在Asp.net中前后臺(tái)Json數(shù)據(jù)的傳遞

    一、前臺(tái)產(chǎn)生Json數(shù)據(jù)傳遞給后臺(tái)處理

    前臺(tái)生成Json數(shù)據(jù)要使用javascript和json.js。

    json.js 下載地址:http://www.json.org/json.js

    ?

    ?

    前臺(tái)代碼:

    ?

    [html]?view plaincopy

  • var?people?=?[{?"UserName":?"t1",?"PassWord":?"111111",?"Sex":?"男"?},{?"UserName":?"t2",?"PassWord":?"222222",?"Sex":?"女"?}];??
  • var?url?=?"Default.aspx?people="?+?escape(people.toJSONString());??
  • request.open("POST",?url,?true);??
  • request.onreadystatechange?=?updatePage;??
  • request.send(null);??

  • 后臺(tái)處理代碼:

    同上面的轉(zhuǎn)化原理一樣,我們先建立一個(gè)json數(shù)據(jù)類,便于List<>中使用。

    ?

    [html]?view plaincopy

  • [DataContract]//序列化??
  • public?class?TestObj??
  • {??
  • ????[DataMember]??
  • ????public?string?UserName?{?get;?set;?}??
  • ?????[DataMember]??
  • ????public?string?PassWord?{?get;?set;?}??
  • ?????[DataMember]??
  • ????public?string?Sex?{?get;?set;?}??
  • ??
  • ??
  • public?TestObj(string?u,string?p,string?s)??
  • ????{??
  • ????????UserName?=?u;??
  • ????????PassWord?=?p;??
  • ????????Sex?=?s;??
  • ????}??
  • }??

  • 對(duì)前臺(tái)提交的Json數(shù)據(jù)相互轉(zhuǎn)化函數(shù)

    ?

    [html]?view plaincopy

  • //json?序列化??
  • ??
  • ????public?static?string?ToJsJson(object?item)??
  • ????{??
  • ????????DataContractJsonSerializer?serializer?=?new?DataContractJsonSerializer(item.GetType());??
  • ????????using(MemoryStream?ms=new?MemoryStream())??
  • ????????{??
  • ????????????serializer.WriteObject(ms,?item);??
  • ????????????StringBuilder?sb?=?new?StringBuilder();??
  • ????????????sb.Append(Encoding.UTF8.GetString(ms.ToArray()));??
  • ????????????return?sb.ToString();??
  • ????????}??
  • ????}??
  • ??
  • ????//反序列化??
  • ??
  • ????public?static?T?FromJsonTo<T>(string?jsonString)??
  • ????{??
  • ????????DataContractJsonSerializer?ser?=?new?DataContractJsonSerializer(typeof(T));??
  • ????????using?(MemoryStream?ms?=?new?MemoryStream(Encoding.UTF8.GetBytes(jsonString)))??
  • ????????{??
  • ????????????T?jsonObject?=?(T)ser.ReadObject(ms);??
  • ????????????return?jsonObject;??
  • ????????}??
  • ????}??

  • 在后臺(tái)代碼中調(diào)用以上函數(shù)進(jìn)行對(duì)數(shù)據(jù)people的處理:

    ?

    [html]?view plaincopy

  • //獲取json字符串??
  • ???????string?jsonStr?=?Request["people"];??
  • ???????List<TestObj>?obj?=?Json.FromJsonTo<List<TestObj>>(jsonStr);??
  • ???????foreach?(TestObj?item?in?obj)??
  • ???????????{??
  • ????????Response.Write(string.Format("UserName:{0},Password:{1},Sex:{2}/r/n",?item.UserName,?item.PassWord,?item.Sex));??
  • ???????????}??
  • ???????Response.End();??

  • 最終的結(jié)果:

    ?

    [html]?view plaincopy

  • List<TestObj>?Users?=?new?List<TestObj>();??
  • Users.Add(new?TestObj("t1",?"1",?"男"));??
  • Users.Add(new?TestObj("t2",?"2",?"女"));??
  • string?json?=?Json.ToJsJson(Users);??
  • Response.Write(json);??
  • Response.End();??

  • 二、前臺(tái)獲取后臺(tái)提交的Json數(shù)據(jù)

    后臺(tái)產(chǎn)生Json數(shù)據(jù)的方法如上原理中提到的:

    ?

    [html]?view plaincopy

  • string?Json;??
  • ??????DataContractJsonSerializer?json?=?new?DataContractJsonSerializer(list.GetType());??
  • ???????????????using?(MemoryStream?stream?=?new?MemoryStream())??
  • ???????????????{??
  • ???????????????????json.WriteObject(stream,?list);??
  • ????????????????????Json?=?Encoding.UTF8.GetString(stream.ToArray());??
  • ?????????????????????
  • ???????????????}??
  • ???????return?Json;?????
  • [html]?view plaincopy

  • ///?<summary>??
  • ??///?Json的數(shù)據(jù)結(jié)構(gòu)??
  • ??///?</summary>??
  • ??[DataContract]??
  • ??class?ResultJson??
  • ??{??
  • ??????[DataMember]??
  • ??????public?bool?Result;??
  • ??????[DataMember]??
  • ??????public?int?Count;??
  • ??????[DataMember]??
  • ??????public?string?Message;??
  • ??}??

  • 前臺(tái)獲取后臺(tái)返回的Json字符串:
    ?

    ?

    [html]?view plaincopy

  • function?updatePage()?{??
  • ??????????if?(request.readyState?==?4)?{??
  • ??????????????if?(request.status?==?200)?{??
  • ??????????????????var?response?=?request.responseText;??
  • ??????????????????//轉(zhuǎn)化成對(duì)象??
  • ??????????????????//方法1??
  • ??????????????????????response?=?response.parseJSON();??
  • ??????????????????//方法2??
  • ??????????????????//?response?=?eval("("?+?response?+?")");??
  • ??????????????????//對(duì)象訪問(wèn)方式??
  • ??????????????????document.getElementById("d1").innerHTML?=?response[1].Sex;??
  • ??????????????????//直接輸出??
  • ?????????????????//?document.getElementById("d1").innerHTML?=?response;??
  • ??????????????}??
  • ??????????}??
  • ??????}??

  • 復(fù)雜的Json字符串操作方法:

    假如我們要轉(zhuǎn)化的JSON字符串格式為:

    ?

    [html]?view plaincopy

  • {??
  • ????"encoding":"UTF-8",??
  • ????"plug-ins":["python","c++","ruby"],??
  • ????"indent":{??
  • ????????"length":3,??
  • ????????"use_space":true??
  • ????}??
  • }??
  • 然后編寫相應(yīng)的序列化的類,注意下面Indent類加的屬性:

    [html]?view plaincopy

  • [DataContract]??
  • class?Config??
  • {??
  • ????[DataMember(Order?=?0)]??
  • ????public?string?encoding?{?get;?set;?}??
  • ????[DataMember(Order?=?1)]??
  • ????public?string[]?plugins?{?get;?set;?}??
  • ????[DataMember(Order?=?2)]??
  • ????public?Indent?indent?{?get;?set;?}??
  • }??
  • ??
  • [DataContract]??
  • class?Indent??
  • {??
  • ????[DataMember(Order?=?0)]??
  • ????public?int?length?{?get;?set;?}??
  • ????[DataMember(Order?=?1)]??
  • ????public?bool?use_space?{?get;?set;?}??
  • }??
  • ?

    輸出JSON字符串

    ?

    [html]?view plaincopy

  • var?config?=?new?Config(){??
  • ?????????????????????????encoding?=?"UTF-8",??
  • ?????????????????????????plugins?=?new?string[]{"python",?"C++",?"C#"},??
  • ?????????????????????????indent?=?new?Indent(){?length?=?4,?use_space?=?false}??
  • ?????????????????????????};??
  • var?serializer?=?new?DataContractJsonSerializer(typeof(Config));??
  • var?stream?=?new?MemoryStream();??
  • serializer.WriteObject(stream,?config);??
  • ??
  • byte[]?dataBytes?=?new?byte[stream.Length];??
  • ??
  • stream.Position?=?0;??
  • ??
  • stream.Read(dataBytes,?0,?(int)stream.Length);??
  • ??
  • string?dataString?=?Encoding.UTF8.GetString(dataBytes);??
  • ??
  • Console.WriteLine("JSON?string?is:");??
  • Console.WriteLine(dataString);??
  • 結(jié)果:

    [html]?view plaincopy

  • JSON?string?is:??
  • {"encoding":"UTF-8","plugins":["python","C++","C#"],"indent":{"length":4,"use_space":false}}??

  • 讀取Json字符串內(nèi)容:

    ?

    [html]?view plaincopy

  • var?mStream?=?new?MemoryStream(Encoding.Default.GetBytes(dataString));??
  • Config?readConfig?=?(Config)serializer.ReadObject(mStream);??
  • ??
  • Console.WriteLine("Encoding?is:?{0}",?readConfig.encoding);??
  • foreach?(string?plugin?in?readConfig.plugins)??
  • {??
  • ????Console.WriteLine("plugins?is:?{0}",?plugin);??
  • }??
  • Console.WriteLine("indent.length?is:?{0}",?readConfig.indent.length);??
  • Console.WriteLine("indent.use_space?is:?{0}",?readConfig.indent.use_space);??
  • 結(jié)果:

    [html]?view plaincopy

  • Encoding?is:?UTF-8??
  • plugins?is:?python??
  • plugins?is:?C++??
  • plugins?is:?C#??
  • indent.length?is:?4??
  • indent.use_space?is:?False??
  • 總結(jié)

    以上是生活随笔為你收集整理的C#使用DataContractJsonSerializer来进行JSON解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。