c#_Json

一、Json的自我介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。可读性和XML的可读性可谓不相上下,也有着XML无法比拟的可扩展性。

1、格式:{}为对象、[]为数组

      1、对象是一个无序的“‘名称/值’对”集合。
      例子:表示人的一个对象:
      {"姓名" : "大憨","年龄" : 24}
      2、数组是值(value)的有序集合。
      例子:一组学生
      {"学生" :[{"姓名" : "小明" , "年龄" : 23},{"姓名" : "大憨" , "年龄" : 24}]}
      json 对象数组:[{"姓名" : "小明" , "年龄" : 23},{"姓名" : "大憨" , "年龄" : 24}]
      3、值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
      4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。 字符串   (string)与C或者Java的字符串非常相似。
      5、数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

2、附上两个格式化校验网址

http://www.bejson.com/

http://tool.chinaz.com/tools/jsonescape.aspx

二、Json的准备工作(添加引用)

一共有两种添加引用的方式:

如果你有时间的话,这里有一个B站的视频(这个视频的美式中文真的很搞,不过讲的还可以),没时间的话我把关键点都整理好了,继续往下看吧!

 1、解决方案→添加引用→引用System.Web.Extensions

需要using这俩伙计:

举个小栗子:

string JSONstr = File.ReadAllText("JSON.json");
JavaScriptSerializer ser = new JavaScriptSerializer();
Person p1 = ser.Deserialize<Person>(JSONstr);          

2、项目→管理NuGet程序包→Newtonsoft.Json

它是一个静态工具,所以不需要使用new关键词

这时你需要using这俩货:

栗子:

string JSONstr = File.ReadAllText("JSON.json");
Person p1 = JsonConvert.DeserializeObject<Person>(JSONstr);

三、Json 读取、添加、删除、修改

    #region Create (从零创建)
        public static string CreateFromZero()
        {
            StringBuilder jsonText = new StringBuilder();
            StringWriter sw = new StringWriter(jsonText);
 
            using (JsonWriter writer = new JsonTextWriter(sw))
            {
                writer.Formatting = Formatting.None;
                writer.WriteStartObject();//{
                #region children
                writer.WritePropertyName("children");
                writer.WriteStartArray();//[ 
 
                writer.WriteStartObject();//{
                writer.WritePropertyName("children");
                writer.WriteStartArray();//[ 
 
                writer.WriteStartObject();//{
                writer.WritePropertyName("organizationCode");
                writer.WriteValue("grandson");
                writer.WritePropertyName("organizationName");
                writer.WriteValue("孙子节点");
                writer.WriteEndObject();//}  
 
                writer.WriteEndArray();//] 
 
                writer.WritePropertyName("organizationCode");
                writer.WriteValue("son");
                writer.WritePropertyName("organizationName");
                writer.WriteValue("子节点");
                writer.WriteEndObject();//}  
 
                writer.WriteEndArray();//] 
                #endregion
                writer.WritePropertyName("organizationCode");
                writer.WriteValue("root");
                writer.WritePropertyName("organizationName");
                writer.WriteValue("根节点");
 
                writer.WriteEndObject();//}  
 
            }
            return jsonText.ToString();
        }
 
        #endregion
 
        #region Delete ,Update (删除指定节点 + 在指定节点前后添加 + 修改节点)
        public static string OperateNode()
        {
            string jsonText = CreateFromZero();
            //string jsonText = File.ReadAllText(FilePath, Encoding.Default);
            JToken jobject = JObject.Parse(jsonText);
            #region 新节点
            StringBuilder jsonTextNew = new StringBuilder();
            StringWriter sw = new StringWriter(jsonTextNew);
 
            using (JsonWriter writer = new JsonTextWriter(sw))
            {
                writer.Formatting = Formatting.None;
                writer.WriteStartObject();//{
                writer.WritePropertyName("organizationCode");
                writer.WriteValue("newson");
                writer.WritePropertyName("organizationName");
                writer.WriteValue("新节点");
                writer.WriteEndObject();//}  
            }
            #endregion
 
            JToken jobjectNew = JObject.Parse(jsonTextNew.ToString());
 
            string[] field = new string[] { "孙子节点" };
            List<JToken> removeNodes = new List<JToken>();
            GetRemoveNodes(jobject, field, ref removeNodes);
            foreach (JToken node in removeNodes)
            {
                JToken nodeObj = node.Parent;
                //nodeObj.Remove();  //删除此节点
 
                //nodeObj.AddAfterSelf(jobjectNew); //在此节点后添加 json 对象
                //nodeObj.AddBeforeSelf(jobjectNew);//在此节点前添加 json 对象
                nodeObj.Replace(jobjectNew);  //修改此节点, 通过替换实现
 
            }
 
 
            return jobject.ToString();
        }
        private static void GetRemoveNodes(JToken token, string[] fields, ref List<JToken> removeNodes)
        {
            JContainer container = token as JContainer;
            if (container == null) return;
 
            foreach (JToken el in container.Children())
            {
                JProperty p = el as JProperty;
                if (p != null && fields.Contains(p.Value.ToString()))
                {
                    removeNodes.Add(el);
                }
                GetRemoveNodes(el, fields, ref removeNodes);
            }
 
        }
        #endregion
 
        #region Retrieve (查询)
        //官网例子比较好:
        //http://www.newtonsoft.com/json/help/html/QueryingLINQtoJSON.htm
        #endregion

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值