csharp/core/Utils/ReadJsonUtil.cs (75 lines of code) (raw):

using System.Collections.Generic; using Newtonsoft.Json.Linq; namespace AlibabaCloud.TeaUtil.Utils { internal static class ReadJsonUtil { internal static object Deserialize(object obj) { if (obj == null) { return null; } Dictionary<string, object> dic = new Dictionary<string, object>(); if (obj is JArray) { return DeserializeJArray((JArray) obj); } else if (obj is JObject) { return DeserializeJObject((JObject) obj); } else { return obj; } } private static Dictionary<string, object> DeserializeJObject(JObject obj) { Dictionary<string, object> dic = new Dictionary<string, object>(); Dictionary<string, object> dicJObj = obj.ToObject<Dictionary<string, object>>(); foreach (var keypair in dicJObj) { dic.Add(keypair.Key, Deserialize(keypair.Value)); } return dic; } private static List<object> DeserializeJArray(JArray obj) { if (obj.Count == 0) { return new List<object>(); } if (obj[0].Type == JTokenType.Object) { List<object> dicList = new List<object>(); List<Dictionary<string, object>> dicObjList = obj.ToObject<List<Dictionary<string, object>>>(); foreach (Dictionary<string, object> objItem in dicObjList) { Dictionary<string, object> objDict = new Dictionary<string, object>(); foreach (var keypair in objItem) { objDict.Add(keypair.Key, Deserialize(keypair.Value)); } dicList.Add(objDict); } return dicList; } else if (obj[0].Type == JTokenType.Array) { List<object> dicObjList = obj.ToObject<List<object>>(); List<object> dicList = new List<object>(); foreach (var item in dicObjList) { dicList.Add(Deserialize((JArray) item)); } return dicList; } else { List<object> dicObjList = obj.ToObject<List<object>>(); return dicObjList; } } } }