1. 程式人生 > >C#中JSON字串和Dictionary字典型別的相互轉換

C#中JSON字串和Dictionary字典型別的相互轉換

在開發過程中,往往會遇到資料型別轉換的情況,根據自己的業務,可能轉換型別有多種,下面就說一下json字串和字典型別的轉換。

public static class JsonUntity
    {
        /// <summary>
        /// 將字典型別序列化為json字串
        /// </summary>
        /// <typeparam name="TKey">字典key</typeparam>
        /// <typeparam name="TValue">字典value</typeparam>
/// <param name="dict">要序列化的字典資料</param> /// <returns>json字串</returns> public static string SerializeDictionaryToJsonString<TKey, TValue>(Dictionary<TKey, TValue> dict) { if (dict.Count == 0) return ""; string
jsonStr = JsonConvert.SerializeObject(dict); return jsonStr; } /// <summary> /// 將json字串反序列化為字典型別 /// </summary> /// <typeparam name="TKey">字典key</typeparam> /// <typeparam name="TValue">字典value</typeparam> /// <param name="jsonStr">
json字串</param>
/// <returns>字典資料</returns> public static Dictionary<TKey, TValue> DeserializeStringToDictionary<TKey, TValue>(string jsonStr) { if (string.IsNullOrEmpty(jsonStr)) return new Dictionary<TKey, TValue>(); Dictionary<TKey, TValue> jsonDict = JsonConvert.DeserializeObject<Dictionary<TKey, TValue>>(jsonStr); return jsonDict; } }

List集合序列化可使用:

        /// <summary>
        /// JSON序列化
        /// </summary>
        public string JsonSerializer<T>(T t)
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream();
            ser.WriteObject(ms, t);
            string jsonString = Encoding.UTF8.GetString(ms.ToArray());
            ms.Close();
            return jsonString;
        }

C#:Json資料反序列化為Dictionary並根據關鍵字獲取指定的值
Json資料:

{
  "dataSet": {
    "header": {
      "returnCode": "0", 
      "errorInfo": "HTTP請求錯誤", 
      "version": "V1.0R010", 
      "totalRows": "2000", 
      "returnRows": "20"
    }, 
    "fieldDefine": {
      "assetId": "string", 
      "serverIdcId": "int", 
      "inputTime": "datetime"
    }, 
    "data": {
      "row": [
        {
          "AssetId": "TCNS2006888", 
          "ServerIdcId": "1", 
          "InputTime": "2008-12-12"
        }, 
        {
          "AssetId": "TCNS2006889", 
          "ServerIdcId": "2", 
          "InputTime": "2008-1-1"
        }
      ]
    }
  }
}

問題:如何獲取header中的資料行,以便顯示在介面上?
效果圖:
這裡寫圖片描述

json資料轉成dictionary的程式碼:

/// <summary>
/// 將json資料反序列化為Dictionary
/// </summary>
/// <param name="jsonData">json資料</param>
/// <returns></returns>
private Dictionary<string, object> JsonToDictionary(string jsonData)
{
    //例項化JavaScriptSerializer類的新例項
    JavaScriptSerializer jss = new JavaScriptSerializer();
    try
    {
        //將指定的 JSON 字串轉換為 Dictionary<string, object> 型別的物件
        return jss.Deserialize<Dictionary<string, object>>(jsonData);
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

使用方法:

private void button1_Click(object sender, EventArgs e)
{
    //Json資料
    string json = "{\"dataSet\":{\"header\":{\"returnCode\":\"0\",\"errorInfo\":\"HTTP請求錯誤\",\"version\":\"V1.0R010\",\"totalRows\":\"2000\",\"returnRows\":\"20\"},\"fieldDefine\":{\"assetId\":\"string\",\"serverIdcId\":\"int\",\"inputTime\":\"datetime\"},\"data\":{\"row\":[{\"AssetId\":\"TCNS2006888\",\"ServerIdcId\":\"1\",\"InputTime\":\"2008-12-12\"},{\"AssetId\":\"TCNS2006889\",\"ServerIdcId\":\"2\",\"InputTime\":\"2008-1-1\"}]}}}";
    Dictionary<string, object> dic = JsonToDictionary(json);//將Json資料轉成dictionary格式
    Dictionary<string, object> dataSet=(Dictionary<string, object>)dic["dataSet"];
    //使用KeyValuePair遍歷資料
    foreach (KeyValuePair<string, object> item in dataSet)
    {
        if (item.Key.ToString() == "header")//獲取header資料
        {
            var subItem=(Dictionary<string,object>)item.Value;
            foreach (var str in subItem)
            {
                textBox1.AppendText(str.Key + ":" + str.Value+"\r\n");//顯示到介面
            }
            break;
        }
    }
}

相關推薦

C#JSON字串Dictionary字典型別相互轉換

在開發過程中,往往會遇到資料型別轉換的情況,根據自己的業務,可能轉換型別有多種,下面就說一下json字串和字典型別的轉換。 public static class JsonUntity { /// <summary>

C++GB2312字串UTF-8之間的轉換-json中文亂碼問題

在程式設計過程中需要對字串進行不同的轉換,特別是Gb2312和Utf-8直接的轉換。在幾個開源的魔獸私服中,很多都是老外開發的,而暴雪為了能 夠相容世界上的各個字符集也使用了UTF-8。在中國使用VS(VS2005以上版本)開發基本都是使用Gb2312的Unicode字符

C#父類子類之間相互轉換

mage all spa 分享 mic ack 子類 utl round 所用到的類文件:Person.cs:Student.cs:Teacher.cs:問題1:總結:1 父類不能直接強制轉換成子類2 只有父類對象指向子類,那麽父類是可以強制轉換成子類,如果父類對象沒有指向

C#二進位制陣列圖片之間的相互轉換

二進位制陣列和影象相互轉換的函式:        //影象轉換成二進位制        private byte[] ImageToByte(Image Picture)        {            MemoryStream ms = new MemoryStr

extjs4json字串json物件轉換

用extjs也有一段時間了,但有些東西就是記不住,就比如json字串和json物件的轉換,我還是把它記下來。 將json字串轉為json物件 var str = '{ "name": "張三", "age": "23" }' var obj = JSON.parse(str); 將j

jsjson字串json物件轉換

準備: 1.json字串 var jsonString="{”name“:"張三","value":"13"}"; 2.json物件 var jsonObject={”name“:"張三","value":"13"}; 3.json陣列 var jsonArray=[{”

c# base64字串圖片的相互轉行

c#base64字串轉圖片用到了bitmap類,封裝 GDI+ 點陣圖,此點陣圖由圖形影象及其特性的畫素資料組成。 Bitmap 是用於處理由畫素資料定義的影象的物件。 具體bitmap類是什麼可以自己百度查詢,這裡就不多介紹了。 #region base64轉圖

Sparkjson字串DataFrame相互轉換

本文介紹基於Spark(2.0+)的Json字串和DataFrame相互轉換。 json字串轉DataFrame spark提供了將json字串解析為DF的介面,如果不指定生成的DF的schema,預設spark會先掃碼一遍給的json字串,然後推斷生成

C常量字串字元陣列的區別

1、 常量字串 在程式碼裡直接出現的”abcdef”這種字串,在程式執行的時候,系統會將它們放在常量區,所謂常量區就是一直存在的,只讀的,不可更改的資料區域,並且一個字串只會有一份。假設你在程式裡有兩行程式碼 char* p1 = “agcd”; char* p2 = “a

Json字串js物件之間的轉換

Json字串和js物件之間的轉換 JSON.stringify()將js物件轉為json字串 JSON.parse()將JSON字串轉為js物件 補充(json物件和json字串的區別) json 字串 var str1 = '{ "nam

c++的4種顯式型別轉換

1.概述 tatic_cast:用於“良性”和“適度良性”的轉換,包括不用強制轉換 const_cast:用於“const”和/或“volatile”進行轉換 reinterpret_cast:轉換為完全不同的意思。為了安全的使用它,關鍵必須轉換回原來的型別。轉換

c++ 的數字字符串的轉換

pre end bst span tof lan hid href 開始 理由:一直忘記數字型的字符串和數字之間的轉換,這次總結一下,以便後面再次用到。 其實 C++ 已經給我們寫好了相應的函數,直接拿來用即可 QA1:如何把一個數字轉換為一個數字字符串?(這個不是很常

C# Unix時間戳DateTime類型相互轉換

c# double timezone 時間戳 convert ret mil alt 相互轉換      /// <summary> /// 將Unix時間戳轉換為DateTime類型時間 /// </summary>

JavaSQL DATE UTIL DATE 的相互轉換

span clas -m cep sta .get turn try urn public String getStringtime (java.sql.Date sdate ){ java.util.Date date = new j

JS 時間字串時間戳的相互轉換

待解決問題 JS開發遇到了個問題:前端vue的UI元件生成的時間字串格式是 2018-9-12 9:11:23,而後臺只能識別2018-09-12 09:11:23這樣的時間字串,即要將時間字串格式做轉換,數字是個位數的值前面要補0。 解決思路 將現有的時間字串先

VCBSTR、Char*、CString型別相互轉換

1、char*轉換成CString 若將char*轉換成CString,除了直接賦值外,還可使用CString::format進行。例如: char chArray[] = "This is a test"; char * p = "This is a test"; 或 LPSTR p = "This i

JSON資料Java物件的相互轉換

  * JSON解析器:         * 常見的解析器:Jsonlib,Gson,fastjson,jackson          1. JSON轉為Java物件         1. 匯入jackson的相關jar包         2. 建立Jackson核心物件

C# double 型數值與 DateTime 的相互轉換

double n = 0; DateTime origintime = DateTime.FromOADate(0); // origintime.ToString()等於“1899-12-30 0:00:00” while (DateTime.FromOADate(n) != Command

json物件java物件的相互轉換方法(json-lib、jackson、fastjson、gson)

一 使用json-lib包下的JSONObject和JSONArray轉換 程式碼如下: package com.test.test; import java.util.ArrayList; import java.util.List; import com.cn.e

Java字串輸入流的相互轉換

在讀取網路資源時經常要用到字串和輸入流之間的相互轉化,找到了些方法,記錄一下。 將字串轉化為輸入流,程式碼如下: public static InputStream getStringStream(S