C#中Json字符串的各種應用類實例講解
在程序中任何事物及信息都可以用對象進行描述和承載,除了比較流行的xml之外,還有一種簡潔快速處理目標信息的形式那就是Json格式。
首先Json格式有自己固定的格式:例如person這個對象就可以簡單的表示成{"name":"xxxx","age":12,"sex":"男"}形式。
Json格式的描述如下:先用{}包含需要表達的對象信息,在{}里使用PropertyName:Value進行對象屬性的描述,同時Json字符串可以實現多層嵌套。例如:Json數據:[{PropertyName:Value,PropertyName:Value},{PropertyName:Value,PropertyName:Value}],Json嵌套格式:{PropertyName:Value,PropertyName:{PropertyName:Value,PropertyName:Value}},理論上可以無限嵌套,但是這里建議嵌套最好不要超過3層。
對Json格式有了了解之后,那我們如何在C#中使用Json以及將已經實現的對象與Json聯系起來。先個給出幾個命名空間
using Newtonsoft.Json;
using System.Runtime.Serialization;
using System.ServiceModel;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Runtime.Serialization.Json;
這里需要注意的是 這些命名空間在 .net3.5及以上本版支持,同時必須在引用中添加 System.Runtime.Serialization.dll的引用。
這里主要使用到的類如下:
JsonSerializer ,StringWriter,StringReader ,JsonWriter,JsonConvert, DataContractJsonSerializer。
1.實現自定義類與Json進行相互轉化處理:
public class Person { public Person() { } public Person(string Name, string Sex, int Age, string Address, PersonCharacter Character) { this.Name = Name; this.Sex = Sex; this.Age = Age; this.Address = Address; this.Character = Character; } public string Name { get; set; } public string Sex { get; set; } public int Age { get; set; } public string Address { get; set; } public PersonCharacter Character { get; set; } } public class PersonCharacter { public string Daode { get; set; } public string Wenhua { get; set; } public string Xiuyang { get; set; } } public void ShowConvert() { Person person = new Person("lanar", "男", 24, "陜西", new PersonCharacter()); JsonSerializer serializer = new JsonSerializer(); StringWriter sw = new StringWriter(); serializer.Serialize(new JsonTextWriter(sw), person ); Console.WriteLine(sw.GetStringBuilder().ToString()); StringReader sr = new StringReader(@"{""Name"":""ppp"", ""Age"":"12"}"); Person p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Person)); Console.WriteLine(p1.Name+ "=>" + p1.Age); }
2. 契約方式:使用System.Runtime.Serialization.dll提供的DataContractJsonSerializer或者 JsonReaderWriterFactory實現
public class Person { public Person() { } public Person(string Name, string Sex, int Age, string Address, PersonCharacter Character) { this.Name = Name; this.Sex = Sex; this.Age = Age; this.Address = Address; this.Character = Character; } [DataMember] public string Name { get; set; } [DataMember] public string Sex { get; set; } [DataMember] public int Age { get; set; } [DataMember] public string Address { get; set; } [DataMember] public PersonCharacter Character { get; set; } } public class PersonCharacter { public string Daode { get; set; } public string Wenhua { get; set; } public string Xiuyang { get; set; } } public void ShowConvert() { Person person = new Person("許展鵬", "男", , "陜西", new PersonCharacter()); Person p = new Person() { Name = "四大圣地", Age = , Sex = "男", Character = new PersonCharacter() { Daode="sds", Wenhua="dasd", Xiuyang="zzz"} }; DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType()); string jsonText; try { using (MemoryStream stream = new MemoryStream()) { serializer.WriteObject(stream, p); jsonText = Encoding.UTF.GetString(stream.ToArray()); Console.WriteLine(jsonText); } using (MemoryStream ms = new MemoryStream(Encoding.UTF.GetBytes(jsonText))) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person)); Person p = (Person)serializer.ReadObject(ms); } } catch (Exception ex ) { throw new Exception(ex.Message,ex); } }
使用契約方式必須在類及相關的屬性添加相關的契約修飾符: [DataContract], [DataMember] 內嵌的對象內部可以不用添加契約修飾符號的。
以上只是最常用的應用方式,對于有特殊需求的實現可以使用第三方實現的json轉換類進行處理。在web頁面可以使用 引入System.Web.Script.Serialization命名空間使用 JavaScriptSerializer類實現簡單的序列化。
上一篇:C#運行時相互關系淺析
欄 目:C#教程
下一篇:C#實現任務欄通知窗口
本文標題:C#中Json字符串的各種應用類實例講解
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6897.html
您可能感興趣的文章
- 01-10C#通過反射獲取當前工程中所有窗體并打開的方法
- 01-10C#實現Winform中打開網頁頁面的方法
- 01-10C#實現實體類與字符串互相轉換的方法
- 01-10C#實現由四周向中心縮小的窗體退出特效
- 01-10Extjs4如何處理后臺json數據中日期和時間
- 01-10C#中DataGridView常用操作實例小結
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10asp.net中XML如何做增刪改查操作
- 01-10C#利用反射技術實現去掉按鈕選中時的邊框效果
- 01-10C#中查找Dictionary中的重復值的方法


閱讀排行
本欄相關
- 01-10C#通過反射獲取當前工程中所有窗體并
- 01-10關于ASP網頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現txt定位指定行完整實例
- 01-10WinForm實現仿視頻播放器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現讀取注冊表監(jiān)控當前操作系統已
隨機閱讀
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數量限制代碼修改
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-11ajax實現頁面的局部加載