雷火电竞-中国电竞赛事及体育赛事平台

歡迎來(lái)到入門(mén)教程網(wǎng)!

C#教程

當(dāng)前位置:主頁(yè) > 軟件編程 > C#教程 >

C#中Json字符串的各種應(yīng)用類(lèi)實(shí)例講解

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C#教程|點(diǎn)擊:

在程序中任何事物及信息都可以用對(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

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有