欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2015年10月16日 13:48:26   投稿:mrr  
這篇文章主要介紹了C#中Json字符串的各種應(yīng)用類實例講解的相關(guān)資料,需要的朋友可以參考下

在程序中任何事物及信息都可以用對象進行描述和承載,除了比較流行的xml之外,還有一種簡潔快速處理目標(biāo)信息的形式那就是Json格式。

       首先Json格式有自己固定的格式:例如person這個對象就可以簡單的表示成{"name":"xxxx","age":12,"sex":"男"}形式。

Json格式的描述如下:先用{}包含需要表達(dá)的對象信息,在{}里使用PropertyName:Value進行對象屬性的描述,同時Json字符串可以實現(xiàn)多層嵌套。例如:Json數(shù)據(jù):[{PropertyName:Value,PropertyName:Value},{PropertyName:Value,PropertyName:Value}],Json嵌套格式:{PropertyName:Value,PropertyName:{PropertyName:Value,PropertyName:Value}},理論上可以無限嵌套,但是這里建議嵌套最好不要超過3層。

       對Json格式有了了解之后,那我們?nèi)绾卧贑#中使用Json以及將已經(jīng)實現(xiàn)的對象與Json聯(lián)系起來。先個給出幾個命名空間

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.實現(xiàn)自定義類與Json進行相互轉(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實現(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)嵌的對象內(nèi)部可以不用添加契約修飾符號的。

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

相關(guān)文章

  • C# 設(shè)計模式系列教程-抽象工廠模式

    C# 設(shè)計模式系列教程-抽象工廠模式

    抽象工廠模式為創(chuàng)建一組相關(guān)或相互依賴的對象提供一個接口,而且無需指定他們的具體類。
    2016-06-06
  • 關(guān)于C#反射 你需要知道的

    關(guān)于C#反射 你需要知道的

    這篇文章主要介紹了C#反射的相關(guān)知識,文中講解的非常詳細(xì),代碼幫助大家更好的參考學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • dotNet中的反射用法入門教程

    dotNet中的反射用法入門教程

    這篇文章主要介紹了dotNet中的反射用法,較為詳細(xì)的分析了.Net中關(guān)于反射的概念,使用方法與相關(guān)注意事項,需要的朋友可以參考下
    2016-02-02
  • C#創(chuàng)建臨時文件的方法

    C#創(chuàng)建臨時文件的方法

    這篇文章主要介紹了C#創(chuàng)建臨時文件的方法,涉及C#中Path.GetTempFileName方法獲取與操作臨時文件的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#?如何獲取當(dāng)前進程或線程的ID

    C#?如何獲取當(dāng)前進程或線程的ID

    這篇文章主要介紹了C#?如何獲取當(dāng)前進程或線程的ID,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • C#實現(xiàn)自定義光標(biāo)并動態(tài)切換

    C#實現(xiàn)自定義光標(biāo)并動態(tài)切換

    這篇文章主要為大家詳細(xì)介紹了如何利用C#語言實現(xiàn)自定義光標(biāo)、并動態(tài)切換光標(biāo)類型,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-07-07
  • c#值類型和引用類型使用示例

    c#值類型和引用類型使用示例

    這篇文章主要介紹了c#值類型和引用類型使用示例,需要的朋友可以參考下
    2014-04-04
  • 使用C#實現(xiàn)自己封裝的Modbus工具類庫

    使用C#實現(xiàn)自己封裝的Modbus工具類庫

    Modbus通訊協(xié)議在工控行業(yè)的應(yīng)用是很多的,并且也是上位機開發(fā)的基本技能之一,所以本文主要為大家介紹了如何使用C#封裝一個Modbus工具類庫,需要的可以參考下
    2024-02-02
  • C# [ImportDll()] 知識小結(jié)

    C# [ImportDll()] 知識小結(jié)

    今天小編就為大家分享一篇關(guān)于C# [ImportDll()] 知識小結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • C#開發(fā)Windows UWP系列之布局面板RelativePanel

    C#開發(fā)Windows UWP系列之布局面板RelativePanel

    這篇文章介紹了C#開發(fā)Windows UWP系列之布局面板RelativePanel,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評論