亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#深入解析Json格式內容

2019-11-17 02:47:11
字體:
來源:轉載
供稿:網友

C#深入解析Json格式內容

繼上一篇《淺談C#手動解析Json格式內容》我又來分析加入了一些功能讓 這個解析類更實用

本章節最會開放我最終制作成功的Anonymous.Json.dll這個解析庫 需要的拿走~

功能繼上一篇增加了許多上一篇只是講述了 解析的步驟但是 至于一些擴展的功能卻沒有涉及

本文將繼續講解

1.如何將json轉換為一個類或者結構 甚至屬性

2.如何將一個類或者結構甚至屬性轉換為json

就這兩點就已經很頭疼了 誒 廢話不多說進入正題

上一篇一直有個很神秘的JsonObject沒有講解 現在先來揭開JsonObject的神秘面紗

internal bool _isArray = false;/// <summary>/// 是否為json array類型/// </summary>public bool IsArray{    get { return _isArray; }}internal bool _isString = false;/// <summary>/// 是否為json string類型/// </summary>public bool IsString{    get { return _isString; }}internal bool _isBool = false;/// <summary>/// 是否為json bool類型/// </summary>public bool IsBool{    get { return _isBool; }}internal bool _isObject = false;/// <summary>/// 是否為json object類型/// </summary>public bool IsObject{    get { return _isObject; }}internal bool _isChar = false;/// <summary>/// 是否為json char類型/// </summary>public bool IsChar{    get { return _isChar; }}internal bool _isInt;/// <summary>/// 是否為json 整數型/// </summary>public bool IsInt{    get { return _isInt; }}internal bool _isLong;/// <summary>/// 是否為json 長整數型/// </summary>public bool IsLong{    get { return _isLong; }}internal bool _isDouble;/// <summary>/// 是否為json 浮點型/// </summary>public bool IsDouble{    get { return _isDouble; }}internal bool _isNull = false;/// <summary>/// 是否為json null/// </summary>public bool IsNull{    get { return _isNull; }}/// <summary>/// 將object轉換為JsonObject/// </summary>/// <param name="obj"></param>public JsonObject(object obj){    ConvertToJsonObject(this, obj);}/// <summary>/// 定義一個任意類型的隱式轉換/// </summary>/// <param name="obj"></param>/// <returns></returns>public static implicit Operator JsonObject(string obj){    return ImplicitConvert(obj);}public static implicit operator JsonObject(int obj){    return ImplicitConvert(obj);}public static implicit operator JsonObject(double obj){    return ImplicitConvert(obj);}public static implicit operator JsonObject(float obj){    return ImplicitConvert(obj);}public static implicit operator JsonObject(long obj){    return ImplicitConvert(obj);}public static implicit operator JsonObject(decimal obj){    return ImplicitConvert(obj);}PRivate static JsonObject ImplicitConvert(object convert){    JsonObject obj = new JsonObject();    obj.ValueConvertToJsonObject(convert.ToString(), false);    return obj;}/// <summary>/// 轉換形態/// </summary>/// <param name="parent"></param>/// <param name="sourceObj"></param>/// <returns>如果是基本類型返回false直接進行設置</returns>private bool ConvertToJsonObject(JsonObject parent, object sourceObj){    if (sourceObj == null)        return false;    Type t = sourceObj.GetType();    if (t.IsGenericType)    {        Type ctorType = t.GetGenericTypeDefinition();        if (ctorType == typeof(List<>))        {            parent._isArray = true;            parent._sourceObj = new List<JsonObject>();            int count = (int)t.GetProperty("Count").GetValue(sourceObj, null);            MethodInfo get = t.GetMethod("get_Item");            for (int i = 0; i < count; i++)            {                object value = get.Invoke(sourceObj, new object[] { i });                JsonObject innerObj = new JsonObject();                if (!ConvertToJsonObject(innerObj, value))                {                    innerObj.ValueConvertToJsonObject(value.ToString(), false);                }                parent.add(innerObj);            }        }        else if (ctorType == typeof(Dictionary<,>))        {            parent._isObject = true;            parent._sourceObj = new Dictionary<string, JsonObject>();            int count = (int)t.GetProperty("Count").GetValue(sourceObj, null);            object kv_entity = t.GetMethod("GetEnumerator").Invoke(sourceObj, null);            Type entityType = kv_entity.GetType();            for (int i = 0; i < count; i++)            {                bool mNext = (bool)entityType.GetMethod("MoveNext").Invoke(kv_entity, null);                if (mNext)                {                    object current = entityType.GetProperty("Current").GetValue(kv_entity, null);                    Type currentType = current.GetType();                    object key = currentType.GetProperty("Key").GetValue(current, null);                    object value = currentType.GetProperty("Value").GetValue(current, null);                    if (!(key is string))                        throw new Exception("json規范格式不正確 Dictionary起始key應為string類型");                    JsonObject innerObj = new JsonObject();                    innerObj._key = key.ToString();                    if (!ConvertToJsonObject(innerObj, value))                    {                        innerObj.ValueConvertToJsonObject(value.ToString(), false);                    }                    parent.add(innerObj);                }            }        }        else        {            throw new Exception("不支持的泛型操作");        }        return true;    }    else if (t.IsArray)    {        parent._isArray = true;        parent._sourceObj = new List<JsonObject>();        int rank = t.GetArrayRank();        if (rank > 1)        {            throw new Exception("暫不支持超過1維的數組");        }        else        {            int length_info = Convert.ToInt32(t.GetProperty("Length").GetValue(sourceObj, null));            for (int i = 0; i < length_info; i++)            {                object innerObj = t.GetMethod("GetValue", new Type[] { typeof(int) }).Invoke(sourceObj, new object[] { i });                JsonObject obj = new JsonObject();                if (!ConvertToJsonObject(obj, innerObj))                {                    obj.ValueConvertToJsonObject(innerObj.ToString(), false);                }                parent.add(obj);            }        }        return true;    }    else if ((t.IsValueType && !t.IsPrimitive) || (t.IsClass && !(sourceObj is string)))    {        parent._isObject = true;        parent._sourceObj = new Dictionary<string, JsonObject>();        PropertyInfo[] infos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public);        foreach (PropertyInfo item in infos)        {            JsonObject innerObj = new JsonObject();            innerObj._key = item.Name;            object obj = item.GetValue(sourceObj, null);            if (!ConvertToJsonObject(innerObj, obj))            {                innerObj.ValueConvertToJsonObject(obj == null ? "null" : obj.ToString(), false);            }            parent.add(innerObj);        }        return true;    }    else    {        parent.ValueConvertToJsonObject(sourceObj.ToString(), false);        return false;    }}public JsonObject() { }/// <summary>/// 如果為json object提取索引內容/// </summary>/// <param name="index">key</param>/// <returns></returns>public JsonObject this[string index]{    get    {        if (IsObject)        {            if (ContainsKey(index))            {                return dictionary()[index];            }            else            {                throw new Exception("不包含 key: " + index);            }        }        else        {            throw new Exception("該對象不是一個json object類型請用IsObject進行驗證后操作");        }    }    set    {        if (IsObject)        {            if (value is JsonObject)            {                dictionary()[index] = value;            }            else            {                dictionary()[index] = new JsonObject(value);            }        }        else        {            throw new Except
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久精品一区| 91免费看视频.| 97久久精品国产| 欧美日韩xxx| 亚洲第一色中文字幕| 欧美日韩在线观看视频小说| 欧美极品少妇xxxxx| 亚洲欧美日韩网| 91免费精品国偷自产在线| 国产91精品久久久久久久| 亚洲国产日韩欧美在线图片| 欧美激情极品视频| 欧美日本国产在线| 在线色欧美三级视频| 久久午夜a级毛片| 欧美成人激情视频| 国产精品日韩av| 国产网站欧美日韩免费精品在线观看| 91在线观看免费网站| 97国产精品人人爽人人做| 国产精品欧美日韩久久| 欧美日韩国产第一页| 国产精品美女www| 久久亚洲精品一区| 久久久97精品| 国产精品第一视频| 在线亚洲男人天堂| 亚洲国产古装精品网站| 国产丝袜一区二区三区免费视频| 久久久久久91| 成人国产精品av| 日韩精品在线视频观看| 午夜精品福利视频| 亚洲欧美国产精品va在线观看| 国产精品成人观看视频国产奇米| 欧美电影《睫毛膏》| 成人精品一区二区三区| 性色av香蕉一区二区| 久久精品成人欧美大片古装| 日本亚洲精品在线观看| 97**国产露脸精品国产| 超碰精品一区二区三区乱码| 亚洲国产欧美一区二区丝袜黑人| 日韩色av导航| 中文字幕日韩精品有码视频| 456国产精品| 国产精品久久久久久久久久久新郎| 欧美激情视频网站| 欧美第一淫aaasss性| 色悠悠久久88| 国产精品入口免费视频一| 美女扒开尿口让男人操亚洲视频网站| 亚洲国产古装精品网站| 国产一区二区欧美日韩| 91免费综合在线| 国产精品免费看久久久香蕉| www国产亚洲精品久久网站| 国产精品xxxxx| 国产亚洲a∨片在线观看| 55夜色66夜色国产精品视频| 久久精品国产久精国产思思| 日韩中文av在线| 久久精品视频va| 亚洲老司机av| 2019中文字幕免费视频| 热久久99这里有精品| 国产成人精品在线视频| 欧美激情亚洲精品| 在线成人激情视频| 91tv亚洲精品香蕉国产一区7ujn| 亚洲精品中文字幕女同| 亚洲人午夜色婷婷| 日韩中文视频免费在线观看| 日韩精品视频免费专区在线播放| 国产精品aaaa| 日韩欧美国产一区二区| 亚洲日韩欧美视频| 日韩成人在线观看| 欧美黑人一区二区三区| 日韩一区二区三区国产| 国产精品十八以下禁看| 国产精品99免视看9| 成人a视频在线观看| 伊人久久精品视频| 国产日韩欧美中文| 欧美精品www在线观看| 亚洲视频欧美视频| 中文字幕日韩专区| 国产精品免费一区| 在线日韩精品视频| 亚洲大胆人体av| 欧美天天综合色影久久精品| 奇门遁甲1982国语版免费观看高清| 中国china体内裑精亚洲片| 中文字幕日韩欧美在线| 欧美成人中文字幕| 尤物yw午夜国产精品视频明星| 中日韩午夜理伦电影免费| 911国产网站尤物在线观看| 亚洲欧美色婷婷| 成人精品久久一区二区三区| 97在线免费观看视频| 日韩在线播放视频| 国产精品嫩草影院久久久| 亚洲国产成人久久综合| 午夜精品久久久99热福利| 麻豆国产va免费精品高清在线| 欧美黑人一区二区三区| 伊人青青综合网站| 日韩av一区在线观看| 欧美久久精品午夜青青大伊人| 亚洲日本欧美中文幕| 亚洲黄色有码视频| 欧美在线视频免费观看| 日韩在线视频线视频免费网站| 国产精品久在线观看| 欧美日韩国产成人在线| 国内自拍欧美激情| 91高潮精品免费porn| 亚洲精品视频在线播放| 一本一本久久a久久精品牛牛影视| 国产精品高潮呻吟久久av黑人| 欧美激情欧美狂野欧美精品| 亚洲a∨日韩av高清在线观看| 日韩免费黄色av| 日韩欧美国产网站| 国产精品美女久久| 日韩电影中文字幕av| 久久影院在线观看| 亚洲最大成人免费视频| 中文欧美在线视频| 国产精品视频免费在线观看| 亚洲日本欧美中文幕| 国产午夜精品免费一区二区三区| 精品久久久久久久大神国产| 日本不卡高字幕在线2019| 最新69国产成人精品视频免费| 亚洲欧美国产一区二区三区| 日韩精品在线观看一区二区| 国产精品劲爆视频| 亚洲国产精品电影| 日韩视频在线观看免费| 91久久精品国产| 亚洲欧美在线一区二区| 亚洲男子天堂网| 在线一区二区日韩| 日av在线播放中文不卡| www.亚洲一区| 欧美一区二区三区精品电影| 在线成人中文字幕| 久久男人av资源网站| 亚洲另类图片色| 欧美国产精品人人做人人爱| 欧美激情视频网址| 麻豆精品精华液| 国产一区二区三区久久精品| 九九九久久久久久| 精品久久中文字幕| 色综合天天综合网国产成人网| 国产精品都在这里| 精品电影在线观看| 国产精品十八以下禁看| 国产一区二区三区在线播放免费观看| 久久精品久久精品亚洲人|