• 如何利用.Net内置类,解析未知复杂Json对象


    如果你乐意,当然可以使用强大的第三方类库Json.Net中的JObject类解析复杂Json字串 。

    我不太希望引入第三方类库,所以在.Net内置类JavaScriptSerializer.DeserializeObject的基础上做了一些封装,可以方便的读取复杂json中的内容,而无需专门定义对应的类型。

    等不及看的,直接下载源码: JsonObject.7z (2013-08-29更新,第三版)

    代码实例:

    namespace JsonUtils
    {
        class Program
        {
            static void Main(string[] args)
            {
                string json = "{errNo:0,data:[{id:100,name:'jack'},{id:101,name:'tom',info:{birthday:'1989-6-5'}}]} ";
    
                JsonObject value = JsonObject.Parse(json);
    
                Console.Write(value["data"][1]["info"]["birthday"].Text());
                Console.Read();
                
            }
        }
    }

    封装的类:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web.Script.Serialization;
    
    namespace JsonUtils
    {
        public class JsonObject
        {
            /// <summary>
            /// 解析JSON字串
            /// </summary>
            public static JsonObject Parse(string json)
            {
                var js = new JavaScriptSerializer();
    
                object obj = js.DeserializeObject(json);
    
                return new JsonObject()
                {
                    Value = obj
                };
            }
    
            /// <summary>
            /// 取对象的属性
            /// </summary>
            public JsonObject this[string key]
            {
                get
                {
                    var dict = this.Value as Dictionary<string, object>;
                    if (dict != null && dict.ContainsKey(key))
                    {
                        return new JsonObject { Value = dict[key] };
                    }
    
                    return new JsonObject();
                }
    
            }
    
            /// <summary>
            /// 取数组
            /// </summary>
            public JsonObject this[int index]
            {
                get
                {
                    var array = this.Value as object[];
                    if (array != null && array.Length > index)
                    {
                        return new JsonObject { Value = array[index] };
                    }
                    return new JsonObject();
                }
            }
    
            /// <summary>
            /// 将值以希望类型取出
            /// </summary>
            public T GetValue<T>()
            {
                return (T)Convert.ChangeType(Value, typeof(T));
            }
    
            /// <summary>
            /// 取出字串类型的值
            /// </summary>
            public string Text()
            {
                return Convert.ToString(Value);
            }
    
            /// <summary>
            /// 取出数值
            /// </summary>
            public double Number()
            {
                return Convert.ToDouble(Value);
            }
    
            /// <summary>
            /// 取出整型
            /// </summary>
            public int Integer()
            {
                return Convert.ToInt32(Value);
            }
    
            /// <summary>
            /// 取出布尔型
            /// </summary>
            public bool Boolean()
            {
                return Convert.ToBoolean(Value);
            }
    
            /// <summary>
            ////// </summary>
            public object Value
            {
                get;
                private set;
            }
    
            /// <summary>
            /// 如果是数组返回数组长度
            /// </summary>
            public int Length
            {
                get
                {
                    var array = this.Value as object[];
                    if (array != null)
                    {
                        return array.Length;
                    }
                    return 0;
                }
            }
    
        }
    }
    JsonObject
  • 相关阅读:
    php stdClass转数组
    PHP 获取1970年前的时间戳,且为负
    springboot响应格式Resullt封装
    php使用elasticsearch
    day0620211207
    day0820211209
    day022021121
    day0520211206
    day0720211208
    day0320211202
  • 原文地址:https://www.cnblogs.com/gateluck/p/complex-json.html
Copyright © 2020-2023  润新知