C#中Json字符串的各種應(yīng)用類實(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ú)限嵌套,但是這里建議嵌套最好不要超過3層。
對(duì)Json格式有了了解之后,那我們?nèi)绾卧贑#中使用Json以及將已經(jīng)實(shí)現(xiàn)的對(duì)象與Json聯(lián)系起來。先個(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的引用。
這里主要使用到的類如下:
JsonSerializer ,StringWriter,StringReader ,JsonWriter,JsonConvert, DataContractJsonSerializer。
1.實(shí)現(xiàn)自定義類與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);
}
}
使用契約方式必須在類及相關(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)換類進(jìn)行處理。在web頁(yè)面可以使用 引入System.Web.Script.Serialization命名空間使用 JavaScriptSerializer類實(shí)現(xiàn)簡(jiǎn)單的序列化。
- C#中把Datatable轉(zhuǎn)換為Json的5個(gè)代碼實(shí)例
- C#中的DataSet、string、DataTable、對(duì)象轉(zhuǎn)換成Json的實(shí)現(xiàn)代碼
- C#解析JSON實(shí)例
- C#實(shí)現(xiàn)Json轉(zhuǎn)Unicode的方法
- C#實(shí)現(xiàn)對(duì)Json字符串處理實(shí)例
- C#處理Json字符串實(shí)例分析
- C#實(shí)現(xiàn)將json轉(zhuǎn)換為DataTable的方法
- C#實(shí)現(xiàn)的json序列化和反序列化代碼實(shí)例
- C#實(shí)現(xiàn)json格式轉(zhuǎn)換成對(duì)象并更換key的方法
- C#實(shí)現(xiàn)將類的內(nèi)容寫成JSON格式字符串的方法
- C#操作 JSON方法匯總
- C#中使用JSON.NET實(shí)現(xiàn)JSON、XML相互轉(zhuǎn)換
- C# JSON格式化轉(zhuǎn)換輔助類 ConvertJson
相關(guān)文章
C#檢查Windows是否安裝了某個(gè)服務(wù)的方法
這篇文章主要介紹了C#檢查Windows是否安裝了某個(gè)服務(wù)的方法,涉及C#操作windows系統(tǒng)服務(wù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
C#實(shí)現(xiàn)Ruby的負(fù)數(shù)索引器
這篇文章主要介紹了C#實(shí)現(xiàn)Ruby的負(fù)數(shù)索引器的相關(guān)代碼和使用方法,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2016-07-07
c# 判斷是否為空然后賦值的4種實(shí)現(xiàn)方法
下面小編就為大家分享一篇c# 判斷是否為空然后賦值的4種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
C#在Unity游戲開發(fā)中進(jìn)行多線程編程的方法
這篇文章主要介紹了C#在Unity游戲開發(fā)中進(jìn)行多線程編程的方法,文中總結(jié)了Unity中使用多線程的幾種方式以及一款多線程插件的介紹,需要的朋友可以參考下2016-04-04
C#在驗(yàn)證文件共享模式下實(shí)現(xiàn)多線程文件寫入
這篇文章主要為大家詳細(xì)介紹了C#在驗(yàn)證文件共享模式下實(shí)現(xiàn)多線程文件寫入的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-01-01
C#日期格式字符串的相互轉(zhuǎn)換操作實(shí)例分析
這篇文章主要介紹了C#日期格式字符串的相互轉(zhuǎn)換操作,結(jié)合實(shí)例形式分析了C#日期格式字符串的相互轉(zhuǎn)換操作函數(shù)與相關(guān)使用技巧,需要的朋友可以參考下2019-08-08
Unity?UGUI的CanvasScaler畫布縮放器組件介紹使用
這篇文章主要為大家介紹了Unity?UGUI的CanvasScaler畫布縮放器組件介紹使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
C#使用Zxing.dll組件解析二維碼的實(shí)現(xiàn)
ZXing是一個(gè)開源的,支持多種格式的條形碼圖像處理庫(kù),本文主要介紹了C#使用Zxing.dll組件解析二維碼的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09

