C#关于Json文件的知识

安装Json包:

参考微软文档:

https://docs.microsoft.com/zh-cn/nuget/consume-packages/install-use-packages-visual-studio

再添加引用

using Newtonsoft.Json;

安装LitJson包:

使用JsonMapper和StreamWriter要使用LitJson,引用和Json包类似,还需要引用

using LitJson;

例句:

string json = JsonMapper.ToJson(user);//需要引用头文件using LitJson;需要在引用中添加LitJson参考引用Newtonsoft.Json
StreamWriter sw = new StreamWriter(strPath);//需要引用头文件using LitJson;
sw.Write(json);
sw.Close();

使用JObject:

需要引用Newtonsoft.Json的dll和using Newtonsoft.Json.Linq的命名空间。LINQ to JSON主要使用到JObject, JArray, JProperty和JValue这四个对象。

 

示例代码:

参考这个博客https://blog.csdn.net/qq_41721686/article/details/103256037

但是这个博客上有好多的错误,本人修正后运行通过把代码写本文中。本文的运行环境是win10 64位系统,编译环境是VS2015.

创建json代码和修改json

using Newtonsoft.Json;
using System;
using System.IO;
using LitJson;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace ConsoleJsonTest
{
    class Program
    {
        public class User
        {
            public string UserName { get; set; }
            public string PassWord { get; set; }
        }
        public class Create
        {
            /*
             * 新建Json
             * <param name = "strPath">新建的位置</param>
             * <param name = "user">对象</param>  
             */
            public static void CreateJson(string strPath, User user)
            {
                string json = JsonMapper.ToJson(user);//需要引用头文件using LitJson;需要在引用中添加LitJson参考引用Newtonsoft.Json
                StreamWriter sw = new StreamWriter(strPath);//需要引用头文件using LitJson;
                sw.Write(json);
                sw.Close();
            }
            /* 
 * 修改Json
 * <param name = "strpath">Json文件所在的位置</param> 
 * 
 */
            public static void EditJson(string strpath)
            {
                string strJson = File.ReadAllText(strpath, Encoding.UTF8);
                JObject oJson = JObject.Parse(strJson);//using Newtonsoft.Json.Linq
                oJson["UserName"] = "Mello";
                oJson["PassWord"] = "123456";
                string strConvert = Convert.ToString(oJson);//将json转换为string
                File.WriteAllText(strpath, strConvert);//将内容写进json文件中
            }
            /* 
             * 读取Json
             * <param name = "strpath">文件所在的位置</param>
             */
            public static User ReadJson(string strPath)
            {
                User user = new User();
                using (StreamReader readFile = File.OpenText(strPath))
                {
                    using (JsonTextReader reader = new JsonTextReader(readFile))//using Newtonsoft.Json
                    {
                        JObject oJson = (JObject)JToken.ReadFrom(reader);
                        user.UserName = oJson["UserName"].ToString();
                        user.PassWord = oJson["PassWord"].ToString();
                    }

                }
                return user;
            }
        }
        static void Main(string[] args)
        {
            User user = new User();
            user.UserName = "qwe";
            user.PassWord = "123";
            Create creat = new Create();
            Create.CreateJson("./name.json",user);
            Create.EditJson("./name.json");
            user = Create.ReadJson("./name.json");
            Console.WriteLine(user.UserName+user.PassWord);
        }
    }
}

结果:

自己运行吧。

第二种方法:

示例代码:

using Newtonsoft.Json;
using System;
using System.IO;
using LitJson;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

namespace JsonTest2
{
    class Json2
    {
        class JSONtest
        {
            public class Skll
            {
                public string Q { get; set; }
                public string W { get; set; }
                public string E { get; set; }
                public string R { get; set; }
            }
            public class Item
            {
                public string iChi { get; set; }
                public string ni { get; set; }
                public string san { get; set; }
                public string yon { get; set; }
            }
            public class Cyapion
            {
                public string CyapionName { get; set; }
                public Skll skll { get; set; }
                public Item item { get; set; }
            }
            /*
             * 新建Json
             * <param name= "strPath">新建的位置</param>
             * <param name = "listApc">Json字符串内容</param>
             */
            public static void CreateJson(string strPath, List<Cyapion> listCypoin)
            {
                Cyapion cyapion = new Cyapion();
                Skll skll = new Skll();
                Item item = new Item();
                cyapion.CyapionName = null;
                cyapion.skll = skll;
                cyapion.item = item;
                string json = JsonMapper.ToJson(cyapion);
                StreamWriter sw = new StreamWriter(strPath);
                sw.Write(json);
                sw.Close();
                // 如果使用listCyapoin写入的会是: [{"cyapionName":null,"skll":{"skllQ":null,"skllW":null,"skllE":null,"skllR":null},"item":{"itemQ":null,"itemW":null,"itemE":null,"itemR":null}}]
                // 如果使用cyapion写入的会是: {"cyapionName":null,"skll":{"skllQ":null,"skllW":null,"skllE":null,"skllR":null},"item":{"itemQ":null,"itemW":null,"itemE":null,"itemR":null}}
            }
            /*
             * 修改Json
             * <param name = "strPath">Json文件所在的位置</param>
             */
            public static void EditJson(string strPath)
            {
                string strJson = File.ReadAllText(strPath, Encoding.UTF8);
                if (strJson.Contains("[") && strJson.Contains("]"))
                {
                    strJson = strJson.Substring(1);
                    strJson = strJson.Substring(0, strJson.Length - 1);
                }
                JObject OJson = JObject.Parse(strJson);
                OJson["CyapionName"] = "Karma";                
                OJson["skll"]["Q"] = "Kok";
                OJson["skll"]["W"] = "www";
                OJson["skll"]["E"] = "eee";
                OJson["skll"]["R"] = "rrr";
                OJson["item"]["iChi"] = "iChi";
                OJson["item"]["ni"] = "ni";
                OJson["item"]["san"] = "san";
                OJson["item"]["yon"] = "yon";
                string strConvert = Convert.ToString(OJson);
                File.WriteAllText(strPath, strConvert);
            }
            public static Cyapion ReadJson(string strPath)
            {
                Cyapion cyapion = new Cyapion();
                using (StreamReader readFile = File.OpenText(strPath))
                {
                    using (JsonTextReader reader = new JsonTextReader(readFile))
                    {
                        JToken jTken = JToken.ReadFrom(reader);
                        JObject oJson = new JObject();
                        if (jTken.Type == JTokenType.Array)
                        {
                            oJson = (JObject)jTken.Last;
                        }
                        else if (jTken.Type == JTokenType.Object)
                        {
                            oJson = (JObject)jTken;
                        }
                        cyapion.CyapionName = oJson["CyapionName"].ToString();
                        cyapion.skll.Q = oJson["Skll"]["Q"].ToString();
                        cyapion.skll.W = oJson["Skll"]["W"].ToString();
                        cyapion.skll.E = oJson["Skll"]["E"].ToString();
                        cyapion.skll.R = oJson["Skll"]["R"].ToString();
                        cyapion.item.iChi = oJson["Item"]["iChi"].ToString();
                        cyapion.item.ni = oJson["Item"]["ni"].ToString();
                        cyapion.item.san = oJson["Item"]["san"].ToString();
                        cyapion.item.yon = oJson["Item"]["yon"].ToString();


                    }
                }
                return cyapion;
            }

        }

        static void Main(string[] args)
        {
            JSONtest js = new JSONtest();            
           List<JSONtest.Cyapion> wps = new List<JSONtest.Cyapion>();
            JSONtest.CreateJson("./qsx.json", wps);
            JSONtest.EditJson("./qsx.json");
        }

    }
}

结果:

自己跑。

-----------------------------------------------2020.07.31更新一个简单的json编写方法--------------------------------------------------------------------

这样写的代码可以添加List<object>  容器。上面的代码试了无数次都不行,有知道的同学可以留言。

先上代码:

var req = new AGVRW() { reqName = "opMaterial",reqID = "xxxxxxx",timestamp = strFu };

req.content = new AGVRW.Content() { type = 0,MRID = "MR01",eqpID = "MT01",material = new List<AGVRW.Material>() { new AGVRW.Material() { material = material1} } };
var jStr = JsonConvert.SerializeObject(req);
string AGVRWstrConvert1 = Convert.ToString(jStr);
JObject AGVRWOJson = JObject.Parse(AGVRWstrjson);

其中json的类跟上面的一样

    public class AGVRW
    {
        public class Content
        {
            public int type { get; set; }
            public string MRID { get; set; }
            public string eqpID { get; set; }             
            public List<Material> material { get; set; }    
        }
   
        public class Material
        {
            public List<object> material { get; set; }
        }
        public string reqName { get; set; }
        public string reqID { get; set; }
        public Content content { get; set; }
        public string timestamp { get; set; }
    }

这样的出的字符串跟上面的一样,但是是一长串,不是文本形式的。这样的适用于通信。

------------------------------------20200804---------------------------------------------------------

解析json文件

这个简单,直接上代码了

        public void parseJson(string M,string h)
        {
            JObject j = (JObject)JsonConvert.DeserializeObject(M);
            string r = jAGV["r"].ToString();
            JObject jh= (JObject)JsonConvert.DeserializeObject(h);
            string c = jhost["c"].ToString();
            int co = int.Parse(c);
            string m = jhost["m"].ToString();
            string r = jhost["r"].ToString();
            string st = jhost["c"]["st"].ToString();
            int sta= int.Parse(st);
            string time = jhost["time"].ToString();

        }

 

-------------------20200820-----------------------------------解析json字符串------------------------------------

以上方法是编辑json字符串,以下方法是解析json字符串。

代码

 JObject jhost     = (JObject)JsonConvert.DeserializeObject(parJson.hostJsonString);
 string  codestr   = jhost["code"].ToString();
 int     code      = int.Parse(codestr);          
 string  reqIDHost = jhost["reqID"].ToString();           

第一行代码的意思就是把parJson.hostJsonString这个字符串转换成jobject字符串。jobject可以理解为中间值。

第二行代码就是C#的字符串。jhost["code"]是json文件中“code”中的字符。ToString可以直接转换成String型。

第三行代码是把string转换成int型。

这种是比较简单的了,也可以写个类,和创建json一样可以直接读。

要是读json全部的内容类比较合适,这种的适合只需要json 部分内容。

                            List<ArrayList> HostMatrial = new List<ArrayList>(); 
                            foreach (var item in jhost["content"]["material"].Children())
                            {
                                HostMatrial.Add(item.ToObject<ArrayList>());
                            }
                            for (int i = 0; i < HostMatrial.Count; ++i)
                            {
                                for (int j = 0; j < HostMatrial[i].Count; ++j)
                                {
                                    var a = HostMatrial[i][j];

                                }
                            }

这里有个重点就是.children()这个方法,这是我的json字符串中有一个List<ArrayList>的数据,我需要把json的格式转换成普通格式,就这个我弄了一下午。按这个是没问题的,要是直接写类就没这种问题了,我太懒了,就没写。折腾了好久。

关于类的我就不写了,只要格式和json对应好就问题不大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值