使用Newtonsoft.Json处理含有未知节点的JSON

字符串转对象时JSON需要先了解该字符串包含的数据格式,是对象还是数组。

   对象是以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间运用 “,”(逗号)分隔。名称用引号括起来;值如果是字符串则必须用括号,数值型则不须要。例如:{"ID":"112","Name":"石子儿"}。

         数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。例如:[{"ID":"112","Name":"石子儿"},{"ID":"113","Name":"陈晨"}]

数组转换可用 var ja=JArray.Parse(str);

对象转换可用 var jo=JObject.Parse(str);

 

JSON字符串转对象的两种方法,含未知JSON元素

格式:        {"ProcessName":21,"Folio":11,"CurrentUser":31,"Parameters":{"FormID":"3","CheckMessage":"1111"}}

Parameters不固定。

一、 将Parameters转为JObject再 使用dynamic 循环获取

{

                JObject objJ = JObject.Parse(JSONStr);//创建JObject对象
                string ProcessName = objJ["ProcessName"].ToString();
                string Folio = objJ["Folio"].ToString();
                string CurrentUser = objJ["CurrentUser"].ToString();
                string JSONParameters = objJ["Parameters"].ToString();
                JObject objParameters = JObject.Parse(JSONParameters);
                Dictionary dict = new Dictionary();
                dynamic parsedObject = objParameters;
                foreach (var item in objParameters)
                {
                    dict.Add(item.Key.ToString(), item.Value.ToString());
                }
            }

二、 使用Model(推荐)

 public class JSONBean
    {
        public JSONBean()
        { }
        public Dictionary Parameters;
        ///


        /// 
        ///

        public int ProcessName { get; set; }
        ///
        /// 
        ///

        public int Folio { get; set; }
        ///
        /// 
        ///

        public int CurrentUser { get; set; }
        ///
        /// 
        ///

    }

{

                JSONBean jb = JsonConvert.DeserializeObject(JSONStr);
                s += jb.CurrentUser;
                s += jb.Folio;
                s += jb.ProcessName;
                foreach (var item in jb.Parameters)
                {
                    s += "\r\n" + item.Key + ":" + item.Value + "\r\n";
                }
            }
            this.txtMSG.Text = s;

你可能感兴趣的:(C#)