C#编程之JSON序列化与反序列化

1、在C#管理NuGet程序包中添加Json.NET

2、C#将对象序列化成JSON字符串

模型类1

/// <summary>
    /// JSON字符串模型.是否出错
    /// </summary>
    public class ErrorModel
    {
        #region  属性
        /// <summary>
        /// 是否出错
        /// </summary>
        public int Error { set; get; }
        #endregion

        #region  构造函数
        
        /// <summary>
        /// 禁止使用空构造函数
        /// </summary>
        private ErrorModel() { }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="error">错误标识,0表示没有错误,1表示有错误</param>
        public ErrorModel(int error)
        {
            this.Error = error;
        }
        #endregion
    }

模型类2

 /// <summary>
    /// JSON字符串模型.返回信息
    /// </summary>
    public class MsgModel
    {
        #region  属性
        /// <summary>
        /// 返回信息
        /// </summary>
        public string Msg { set; get; }
        #endregion

        #region 构造函数
        /// <summary>
        /// 禁止使用空构造函数
        /// </summary>
        private MsgModel() { }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="msg">返回信息,没有错误信息Msg=“Success“,
        /// 否则,Msg中包含错误信息。</param>
        public MsgModel(string msg)
        {
            this.Msg = msg;
        }
        #endregion 
    }

模型类3

 /// <summary>
    /// JSON字符串模型.数据
    /// </summary>
    public class DataModel
    {
        #region 属性
        /// <summary>
        /// 返回数据
        /// </summary>
        public IList<PN_GreDegreeModel> Data { set; get; }
        #endregion

        #region  构造函数
        /// <summary>
        /// 禁止使用空构造函数
        /// </summary>
        private DataModel() { }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="data">返回数据</param>
        public DataModel(IList<PN_GreDegreeModel> data)
        {
            this.Data = data;
        }
        #endregion 
    }

生成JSON字符串

 /// <summary>
        /// 生成JSON字符串
        /// </summary>
        /// <param name="errorModel">错误编码,0查询成功,1查询失败</param>
        /// <param name="msgModel">返回信息,没有错误信息Msg=“Success“,
        /// 否则,Msg中包含错误信息。</param>
        /// <param name="list">返回数据</param>
        /// <returns></returns>
        public string createJSON(int error, string msg, IList<PN_GreDegreeModel> list)
        {
            //定义变量
            string data = null;
            ArrayList aryList = new ArrayList();
            //生成对象
            ErrorModel errorModel = new ErrorModel(error);
            MsgModel msgModel = new MsgModel(msg);
            DataModel dataModel = new DataModel(list);
            //装箱
            aryList.Add(errorModel);
            aryList.Add(msgModel);
            aryList.Add(list);
            //序列化
            data = JsonConvert.SerializeObject(aryList);
            return data;
        }

3、C#将JSON字符串反序列化成对象

无数组:

            //将json字符串转换为对象
            JObject jObject = JObject.Parse(s);

有数组:

            //将json字符串转换为对象
            JObject jObject = (JObject)JsonConvert.Parse(getString);
            JArray jar = JArray.Parse(jObject["RTDataSets"].ToString());
            //对收到的字符串进行解析
            for (int j = 0; j <jar.Count; j++)
                {
                    JObject job = JObject.Parse(jar[j].ToString());
                    tampAdds = (string)job["kksCode"];

                    JArray jarr = JArray.Parse(job["RTDataValues"].ToString());
                    JObject jobs = JObject.Parse(jarr[0].ToString());
                    value = (double)(jobs["Value"]);
                    //_dict.Add(add,value);
                }

JObject反序列化的是对象{},JArray反序列化的是数组[]。

附加链接:Json.NET Document


posted @ 2016-06-11 11:31  haxianhe  阅读(155)  评论(0编辑  收藏  举报