最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#讀寫json文件操作的正確方法

 更新時間:2024年07月17日 10:43:19   作者:Love樸啾啾  
在現(xiàn)代開發(fā)中JSON已經(jīng)成為了一種非常流行的數(shù)據(jù)格式,下面這篇文章主要給大家介紹了關于C#讀寫json文件操作的正確方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

一、JSON 文件

JSON(全稱為JavaScript Object Notation,JavaScript 對象表示法) 是一種輕量級的數(shù)據(jù)交換格式,用于存儲和交換文本信息的語法,類似 XML。它是基于JavaScript語法標準的一個子集,但它獨立于 JavaScript,因此許多程序環(huán)境能夠讀?。ń庾x)和生成 JSON。

JavaScript 對象表示法(JSON)是用于將結(jié)構(gòu)化數(shù)據(jù)表示為 JavaScript 對象的標準格式,通常用于在網(wǎng)站上表示和傳輸數(shù)據(jù)(例如從服務器向客戶端發(fā)送一些數(shù)據(jù),因此可以將其顯示在網(wǎng)頁上)。JSON 可以作為一個對象或者字符串存在,前者用于解讀 JSON 中的數(shù)據(jù),后者用于通過網(wǎng)絡傳輸 JSON 數(shù)據(jù)。

二、JSON 語法規(guī)則

JSON數(shù)據(jù)由鍵值對組成,每個鍵值對之間用逗號分隔,整個數(shù)據(jù)以大括號 {} 包裹表示一個對象,或者以中括號 [] 包裹表示一個數(shù)組?;菊Z法結(jié)構(gòu)如下:
1、對象(Object):使用大括號 {} 包裹,鍵值對之間使用冒號 : 分隔,如 { “name”: “John”, “age”: 30 }。

2、數(shù)組(Array):使用中括號 [] 包裹,元素之間使用逗號 , 分隔,如 [ “apple”, “banana”, “orange” ]。

3、使用斜桿 \ 來轉(zhuǎn)義字符。

4、大括號 {} 保存對象,對象可以包含多個數(shù)組。

5、中括號 [] 保存數(shù)組,數(shù)組可以包含多個對象。

三、JSON讀取操作類

1、添加 System.Runtime.Serialization 程序集文件

系統(tǒng)程序集文件中有能操作 JSON 文件的 API庫文件,在項目 “引用” 上右鍵,點擊“添加引用” ,打開“引用管理器”窗口。

在程序集中找到 System.Runtime.Serialization ,選中后點擊確定。將 System.Runtime.Serialization 文件添加到項目引用中。

2、JSON讀寫操作類

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;

namespace FileOperationsDemo
{
    public static class JsonHandle
    {
        /// <summary>
        /// Json轉(zhuǎn)換成對象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jsonText"></param>
        /// <returns></returns>
        public static T JsonToObject<T>(string jsonText)
        {
            DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(T));
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText));
            T obj = (T)s.ReadObject(ms);
            ms.Dispose();
            return obj;
        }
        /// <summary>
        /// 對象轉(zhuǎn)換成JSON
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string ObjectToJSON<T>(T obj)
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
            string result = string.Empty;
            using (MemoryStream ms = new MemoryStream())
            {
                serializer.WriteObject(ms, obj);
                ms.Position = 0;

                using (StreamReader read = new StreamReader(ms))
                {
                    result = read.ReadToEnd();
                }
            }
            return result;
        }
        /// <summary>
        /// 將序列化的json字符串內(nèi)容寫入Json文件,并且保存
        /// </summary>
        /// <param name="path">路徑</param>
        /// <param name="jsonConents">Json內(nèi)容</param>
        public static void WriteJsonFile(string path, string jsonConents)
        {
            if (!File.Exists(path))  // 判斷是否已有相同文件 
            {
                using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    fs.Seek(0, SeekOrigin.Begin);
                    fs.SetLength(0);
                    using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
                    {
                        sw.WriteLine(jsonConents);
                    }
                }
            }
        }
        /// <summary>
        /// 獲取到本地的Json文件并且解析返回對應的json字符串
        /// </summary>
        /// <param name="filepath">文件路徑</param>
        /// <returns>Json內(nèi)容</returns>
        public static string GetJsonFile(string filepath)
        {
            string json = string.Empty;
            using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
                {
                    json = sr.ReadToEnd().ToString();
                }
            }
            return json;
        }
    }
}

3、使用用例

        /// <summary>
        /// 讀取JSON文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button11_Click(object sender, EventArgs e)
        {
            openFileDialog1.Title = "Choose JSON File";
            openFileDialog1.Filter = "JSON (*.json)|*.json";
            openFileDialog1.Multiselect = false;
            openFileDialog1.RestoreDirectory = true;
            openFileDialog1.InitialDirectory = dir;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                // 獲取文件
                string jsonTXT = JsonHandle.GetJsonFile(openFileDialog1.FileName);
                richTextBox5.AppendText(jsonTXT + "\n");
            }
        }
        /// <summary>
        /// 寫入JSON文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button12_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(richTextBox5.Text.ToString().Trim()))
            {
                // JSON反序列化:將JSON 字符串轉(zhuǎn)換成對象
                UDPRecData refData_UDP = JsonHandle.JsonToObject<UDPRecData>(richTextBox5.Text.ToString().Trim());
                // JSON序列化:將對象轉(zhuǎn)換成JSON 字符串 
                string jsonFileDS = JsonHandle.ObjectToJSON<UDPRecData>(refData_UDP);

                saveFileOpen.Title = "保存文件";
                saveFileOpen.Filter = "JSON (*.json)|*.json";
                saveFileOpen.RestoreDirectory = true;
                saveFileOpen.InitialDirectory = dir;
                saveFileOpen.FilterIndex = 1;
                if (saveFileOpen.ShowDialog() == DialogResult.OK)
                {
                    // 保存,輸出JSON文件
                    JsonHandle.WriteJsonFile(saveFileOpen.FileName, jsonFileDS);
                }
            }
        }

此外,還需寫一個與JSON數(shù)據(jù)結(jié)構(gòu)一致的數(shù)據(jù)類。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;

namespace FileOperationsDemo
{
    [DataContract]
    public class UDPRecData
    {
        [DataMember(Order = 0)]
        public Int32 id { get; set; }
        [DataMember(Order = 1)]
        public Identification ident { get; set; }
        [DataMember(Order = 2)]
        public TypeData type { get; set; }
        [DataMember(Order = 3)]
    }
    [DataContract]
    public class Identification
    {
        [DataMember(Order = 0)]
        public string airline { get; set; }
        [DataMember(Order = 1)]
        public string reg { get; set; }
        [DataMember(Order = 2)]
        public string call { get; set; }
        [DataMember(Order = 3)]
        public string label { get; set; }
    }
    [DataContract]
    public class TypeData
    {
        [DataMember(Order = 0)]
        public string icao { get; set; }
        [DataMember(Order = 1)]
        public double wingSpan { get; set; }
        [DataMember(Order = 2)]
        public double wingArea { get; set; }
    }
}

操作的JSON文件

{
  "id" : 6711,
  "ident" : {
    "airline" : "DYH",
    "reg" : "D-YVEL",
    "call" : "llH1234",
    "label" : "Test Temp"
  },
  "type" : {
    "icao" : "Y72",
    "wingSpan" : 11.1,
    "wingArea" : 16.2
  }
}

四、用字典提取Json

1、需要添加引用(System.Web.Extensions),用JavaScriptSerializer類(using System.Web.Script.Serialization;)反序列化,將字典作為類型提取JSON內(nèi)數(shù)據(jù)。

        private void Deserialize()
        {
            jsonExplorer.Nodes.Clear();
            JavaScriptSerializer js = new JavaScriptSerializer();

            try
            {
                Dictionary<string, object> dic = js.Deserialize<Dictionary<string, object>>(txtInput.Text);

                TreeNode rootNode = new TreeNode("Root");
                jsonExplorer.Nodes.Add(rootNode);
                BuildTree(dic, rootNode);
            }
            catch (ArgumentException argE)
            {
                MessageBox.Show("JSON data is not valid", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

2、通過嵌套循環(huán)讀取Json序列內(nèi)數(shù)組數(shù)據(jù),并將所有數(shù)據(jù)綁定到TreeView控件上。

     public void BuildTree(Dictionary<string, object> dictionary, TreeNode node)
        {
            foreach (KeyValuePair<string, object> item in dictionary)
            {
                TreeNode parentNode = new TreeNode(item.Key);
                node.Nodes.Add(parentNode);

                try
                {
                    dictionary = (Dictionary<string, object>)item.Value;
                    BuildTree(dictionary, parentNode);
                }
                catch (InvalidCastException dicE) {
                    try
                    {
                        ArrayList list = (ArrayList)item.Value;
                        foreach (string value in list)
                        {
                            TreeNode finalNode = new TreeNode(value);
                            finalNode.ForeColor = Color.Blue;
                            parentNode.Nodes.Add(finalNode);
                        }
                        
                    }
                    catch (InvalidCastException ex)
                    {
                        TreeNode finalNode = new TreeNode(item.Value.ToString());
                        finalNode.ForeColor = Color.Blue;
                        parentNode.Nodes.Add(finalNode);
                    }
                }
            }
        }

總結(jié) 

到此這篇關于C#讀寫json文件操作正確方法的文章就介紹到這了,更多相關C#讀寫json文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C# 實現(xiàn)截圖軟件功能實例代碼

    C# 實現(xiàn)截圖軟件功能實例代碼

    這篇文章主要介紹了C# 實現(xiàn)截圖軟件功能實例代碼,需要的朋友可以參考下
    2017-06-06
  • WCF的異常處理

    WCF的異常處理

    這篇文章介紹了WCF處理異常的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#遍歷文件夾及其子目錄的完整實現(xiàn)方法

    C#遍歷文件夾及其子目錄的完整實現(xiàn)方法

    這篇文章主要介紹了C#遍歷文件夾及其子目錄的方法,涉及C#文件與目錄的基本操作技巧,簡單實用,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • C# OpenCvSharp實現(xiàn)通過特征點匹配圖片

    C# OpenCvSharp實現(xiàn)通過特征點匹配圖片

    這篇文章主要為大家詳細介紹了C#如何結(jié)合OpenCVSharp4實現(xiàn)通過特征點匹配圖片,文中的示例代碼簡潔易懂,具有一定的學習價值,需要的小伙伴可以參考下
    2023-11-11
  • asp.net頁面中如何獲取Excel表的內(nèi)容

    asp.net頁面中如何獲取Excel表的內(nèi)容

    在瀏覽網(wǎng)頁時,一定會看到我們需要保存的信息,我們比較常用的方法就是拖動鼠標,選中我們需要的內(nèi)容,然后ctrl+c,然后在保持到excel當中去,那么如何用asp.net獲取excel表的內(nèi)容呢,下面小編就給大家介紹asp.net獲取excel表的內(nèi)容,需要的朋友可以參考下
    2015-08-08
  • C#結(jié)合Free?Spire.PDF實現(xiàn)刪除PDF中的數(shù)字簽名

    C#結(jié)合Free?Spire.PDF實現(xiàn)刪除PDF中的數(shù)字簽名

    這篇文章主要為大家詳細介紹了C#如何結(jié)合Free?Spire.PDF實現(xiàn)刪除PDF中的數(shù)字簽名,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下
    2026-03-03
  • C#實現(xiàn)毫秒轉(zhuǎn)換成時分秒的方法

    C#實現(xiàn)毫秒轉(zhuǎn)換成時分秒的方法

    這篇文章主要介紹了C#實現(xiàn)毫秒轉(zhuǎn)換成時分秒的方法,涉及C#時間的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • C# jpg縮略圖函數(shù)代碼

    C# jpg縮略圖函數(shù)代碼

    生成jpg縮略圖字節(jié),本人的小軟件中需要用到的功能,所以自己做了一個函數(shù),和大家分享 為什么要生成字節(jié)而不是文件,這是為了方便后續(xù)處理啦^_^
    2011-06-06
  • WinForm中BackgroundWorker控件用法簡單實例

    WinForm中BackgroundWorker控件用法簡單實例

    這篇文章主要介紹了WinForm中BackgroundWorker控件用法,以一個簡單實例形式分析了BackgroundWorker控件的定義、設置及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • 基于C#的圖表控件庫 ScottPlot編譯visual studio 2022

    基于C#的圖表控件庫 ScottPlot編譯visual studio 2022

    基于 C# 的 圖表控件庫 ScottPlot,開源免費,可以用于開發(fā)一些上位機軟件,如電壓、電流波形的顯示,開發(fā)【示波器】圖形界面,可以顯示一些圖表、波形,總之功能比較的強大,本文介紹了基于C#的圖表控件庫 ScottPlot編譯visual studio 2022,需要的朋友可以參考下
    2022-06-06

最新評論

宁南县| 盐池县| 耒阳市| 江陵县| 大港区| 阜阳市| 大埔区| 淳化县| 长沙市| 吉隆县| 深水埗区| 太和县| 盘山县| 怀远县| 盐源县| 加查县| 逊克县| 余江县| 哈巴河县| 靖远县| 辉南县| 南江县| 甘孜县| 西林县| 濮阳市| 徐闻县| 梨树县| 沙洋县| 正蓝旗| 南乐县| 梅河口市| 宁化县| 乐山市| 河西区| 平舆县| 冕宁县| 太和县| 南京市| 巴林左旗| 大城县| 灵璧县|