真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

怎么在C#中使用Json.Net進(jìn)行序列化和反序列化

本篇文章給大家分享的是有關(guān)怎么在C#中使用Json.Net進(jìn)行序列化和反序列化,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

我們提供的服務(wù)有:網(wǎng)站建設(shè)、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、槐蔭ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的槐蔭網(wǎng)站制作公司

一、將對象序列化為Json格式字符串

首先是正常的序列化操作,對于給定的類:

private class MyClass
{
  public int MyNum;
  public string MyStr;
}

將該類的實(shí)例序列化為Json格式字符串,首先引用命名空間Newtonsoft.Json:

MyClass myClass = new MyClass { MyNum = 10, MyStr = "Hello World" };
Console.WriteLine(JsonConvert.SerializeObject(myClass));

其打印結(jié)果:

{"MyNum":10,"MyStr":"Hello World"}

在打印到本地Log文件以供自己查看使用時(shí),可以選擇轉(zhuǎn)換為帶有縮進(jìn)的Json格式字符串:

Console.WriteLine(JsonConvert.SerializeObject(myClass, Formatting.Indented));

此時(shí)打印結(jié)果為:

{
 "MyNum": 10,
 "MyStr": "Hello World"
}

二、將Json格式字符串反序列化為對象

對于給定的字符串:

string jsonStr = @"{""MyNum"": 10,""MyStr"": ""Hello World""}";

將其反序列化為MyClass類型的對象:

MyClass myClass = JsonConvert.DeserializeObject(jsonStr);
Console.WriteLine(myClass.MyStr); //Hello World

三、使用JObject動態(tài)序列化/反序列化

以上例子都是使用強(qiáng)類型進(jìn)行序列化和反序列操作,但有時(shí)也會用到不指定類型而直接操作Json格式數(shù)據(jù)的情況,此時(shí)就需要用位于命名空間ewtonsoft.Json.Linq中的JObject類型的對象:

string jsonStr = @"{""MyNum"": 10,""MyStr"": ""Hello World""}";
JObject jObject = JObject.Parse(jsonStr);
Console.WriteLine(jObject.ToString(Formatting.None)); //{"MyNum":10,"MyStr":"Hello World"}
//打印一條屬性的值
Console.WriteLine(jObject["MyStr"].Value()); //Hello World
//添加一條屬性
jObject.Add("MyStr2", "HaHa");
//打印當(dāng)前Json字符串
Console.WriteLine(jObject.ToString(Formatting.None)); //{"MyNum":10,"MyStr":"Hello World","MyStr2":"HaHa"}

四、定制化序列化/反序列過程

1.在C#中,定制化的配置通常使用特性來完成,這里也不例外,例如簡單的,在序列化/反序列時(shí)忽略某個(gè)字段/屬性:

private class MyClass
{
  [JsonIgnore]
  public int MyNum;
  public string MyStr;
}

此時(shí),無論序列化還是反序化時(shí),字段MyNum都不再參與這些過程;

2.自定義某個(gè)字段/屬性的序列化/反序列化規(guī)則:

當(dāng)接收到的Json格式字符串與本地已有類型不統(tǒng)一時(shí),需要進(jìn)行自定義的反序列化過程,反之亦然,例如Json字符串中以字符串"TRUE"表示布爾類型true(不自定義,這個(gè)過程依然走的通,只是以此舉例),以字符串"FALSE"表示布爾類型false時(shí),需要自定義如下:

/// 
/// 自定義布爾類型數(shù)據(jù)轉(zhuǎn)換規(guī)則
/// 
public class MyBoolConverter : JsonConverter
{
  private const string TrueStr = "TRUE";
  private const string FalseStr = "FALSE";
  public override bool CanConvert(Type objectType) => true;

  //反序列化
  public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
  {
    if (reader.ValueType == typeof(string))
    {
      if ((string)reader.Value == TrueStr)
      {
        return true;
      }
      else
      {
        return false;
      }
    }
    return false;
  }

  //序列化
  public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
  {
    if (value.GetType() == typeof(bool))
    {
      bool result = (bool)value;
      if (result)
      {
        writer.WriteValue(TrueStr);
      }
      else
      {
        writer.WriteValue(FalseStr);
      }
    }
  }
}

然后,在需要操作的類型定義中的字段/屬性中加入該特性:

private class MyClass
{
  [JsonConverter(typeof(MyBoolConverter))]
  public bool MyBool;
}

此時(shí):

string jsonStr = @"{""MyBool"": ""TRUE""}";
MyClass1 myClass = JsonConvert.DeserializeObject(jsonStr);
Console.WriteLine(myClass.MyBool); //True
Console.WriteLine(JsonConvert.SerializeObject(myClass)); //{"MyBool":"TRUE"}

C#是什么

C#是一個(gè)簡單、通用、面向?qū)ο蟮木幊陶Z言,它由微軟Microsoft開發(fā),繼承了C和C++強(qiáng)大功能,并且去掉了一些它們的復(fù)雜特性,C#綜合了VB簡單的可視化操作和C++的高運(yùn)行效率,以其強(qiáng)大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程從而成為.NET開發(fā)的首選語言,但它不適用于編寫時(shí)間急迫或性能非常高的代碼,因?yàn)镃#缺乏性能極高的應(yīng)用程序所需要的關(guān)鍵功能。

以上就是怎么在C#中使用Json.Net進(jìn)行序列化和反序列化,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前標(biāo)題:怎么在C#中使用Json.Net進(jìn)行序列化和反序列化
分享鏈接:http://weahome.cn/article/ihgejc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部