C#中Json字符串的各種應(yīng)用類(lèi)實(shí)例講解
在程序中任何事物及信息都可以用對(duì)象進(jìn)行描述和承載,除了比較流行的xml之外,還有一種簡(jiǎn)潔快速處理目標(biāo)信息的形式那就是Json格式。
首先Json格式有自己固定的格式:例如person這個(gè)對(duì)象就可以簡(jiǎn)單的表示成{"name":"xxxx","age":12,"sex":"男"}形式。
Json格式的描述如下:先用{}包含需要表達(dá)的對(duì)象信息,在{}里使用PropertyName:Value進(jìn)行對(duì)象屬性的描述,同時(shí)Json字符串可以實(shí)現(xiàn)多層嵌套。例如:Json數(shù)據(jù):[{PropertyName:Value,PropertyName:Value},{PropertyName:Value,PropertyName:Value}],Json嵌套格式:{PropertyName:Value,PropertyName:{PropertyName:Value,PropertyName:Value}},理論上可以無(wú)限嵌套,但是這里建議嵌套最好不要超過(guò)3層。
對(duì)Json格式有了了解之后,那我們?nèi)绾卧贑#中使用Json以及將已經(jīng)實(shí)現(xiàn)的對(duì)象與Json聯(lián)系起來(lái)。先個(gè)給出幾個(gè)命名空間
using Newtonsoft.Json;
using System.Runtime.Serialization;
using System.ServiceModel;
using Newtonsoft.Json.Linq;
using System.IO;
using System.Runtime.Serialization.Json;
這里需要注意的是 這些命名空間在 .net3.5及以上本版支持,同時(shí)必須在引用中添加 System.Runtime.Serialization.dll的引用。
這里主要使用到的類(lèi)如下:
JsonSerializer ,StringWriter,StringReader ,JsonWriter,JsonConvert, DataContractJsonSerializer。
1.實(shí)現(xiàn)自定義類(lèi)與Json進(jìn)行相互轉(zhuǎn)化處理:
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實(shí)現(xiàn)
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);
}
}
使用契約方式必須在類(lèi)及相關(guān)的屬性添加相關(guān)的契約修飾符: [DataContract], [DataMember] 內(nèi)嵌的對(duì)象內(nèi)部可以不用添加契約修飾符號(hào)的。
以上只是最常用的應(yīng)用方式,對(duì)于有特殊需求的實(shí)現(xiàn)可以使用第三方實(shí)現(xiàn)的json轉(zhuǎn)換類(lèi)進(jìn)行處理。在web頁(yè)面可以使用 引入System.Web.Script.Serialization命名空間使用 JavaScriptSerializer類(lèi)實(shí)現(xiàn)簡(jiǎn)單的序列化。
上一篇:C#運(yùn)行時(shí)相互關(guān)系淺析
欄 目:C#教程
下一篇:C#實(shí)現(xiàn)任務(wù)欄通知窗口
本文標(biāo)題:C#中Json字符串的各種應(yīng)用類(lèi)實(shí)例講解
本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6897.html
您可能感興趣的文章
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并打開(kāi)的方法
- 01-10C#實(shí)現(xiàn)Winform中打開(kāi)網(wǎng)頁(yè)頁(yè)面的方法
- 01-10C#實(shí)現(xiàn)實(shí)體類(lèi)與字符串互相轉(zhuǎn)換的方法
- 01-10C#實(shí)現(xiàn)由四周向中心縮小的窗體退出特效
- 01-10Extjs4如何處理后臺(tái)json數(shù)據(jù)中日期和時(shí)間
- 01-10C#中DataGridView常用操作實(shí)例小結(jié)
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10asp.net中XML如何做增刪改查操作
- 01-10C#利用反射技術(shù)實(shí)現(xiàn)去掉按鈕選中時(shí)的邊框效果
- 01-10C#中查找Dictionary中的重復(fù)值的方法


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載


