程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中Json字符串的各種應用類,

C#中Json字符串的各種應用類,

編輯:C#入門知識

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實現

1 [DataContract] 2 public class Person 3 { 4 public Person() 5 { 6 } 7 public Person(string Name, string Sex, int Age, string Address, PersonCharacter Character) 8 { 9 this.Name = Name; 10 this.Sex = Sex; 11 this.Age = Age; 12 this.Address = Address; 13 this.Character = Character; 14 } 15 [DataMember] 16 public string Name { get; set; } 17 18 [DataMember] 19 public string Sex { get; set; } 20 21 [DataMember] 22 public int Age { get; set; } 23 24 [DataMember] 25 public string Address { get; set; } 26 27 [DataMember] 28 public PersonCharacter Character { get; set; } 29 30 } 31 32 public class PersonCharacter 33 { 34 35 36 public string Daode { get; set; } 37 38 39 public string Wenhua { get; set; } 40 41 42 public string Xiuyang { get; set; } 43 } 44 45 46 public void ShowConvert() 47 { 48 Person person = new Person("許展鵬", "男", 24, "陝西", new PersonCharacter()); 49 50 Person p = new Person() { Name = "四大聖地", Age = 22, Sex = "男", Character = new PersonCharacter() { Daode="sds", Wenhua="dasd", Xiuyang="zzz"} }; 51 DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType()); 52 string jsonText; 53 54 try 55 { 56 using (MemoryStream stream = new MemoryStream()) 57 { 58 serializer.WriteObject(stream, p); 59 jsonText = Encoding.UTF8.GetString(stream.ToArray()); 60 Console.WriteLine(jsonText); 61 } 62 63 using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText))) 64 { 65 DataContractJsonSerializer serializer1 = new DataContractJsonSerializer(typeof(Person)); 66 Person p1 = (Person)serializer1.ReadObject(ms); 67 68 } 69 } 70 catch (Exception ex ) 71 { 72 73 throw new Exception(ex.Message,ex); 74 } 75 } View Code

使用契約方式必須在類及相關的屬性添加相關的契約修飾符: [DataContract], [DataMember] 內嵌的對象內部可以不用添加契約修飾符號的。

     以上只是最常用的應用方式,對於有特殊需求的實現可以使用第三方實現的json轉換類進行處理。在web頁面可以使用   引入System.Web.Script.Serialization命名空間使用 JavaScriptSerializer類實現簡單的序列化。

 

JSON官網:http://www.json.org/json-zh.html

獨立JSON序列化:http://msdn.microsoft.com/zh-cn/library/bb412170.aspx

如何對JSON序列化和反序列化:http://msdn.microsoft.com/zh-cn/library/bb412179.aspx

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved