| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- namespace Top.Api.Parser
- {
- /// <summary>
- /// TOP JSON响应通用读取器。
- /// </summary>
- public class TopJsonReader : ITopReader
- {
- private IDictionary json;
- public TopJsonReader(IDictionary json)
- {
- this.json = json;
- }
- public bool HasReturnField(object name)
- {
- return json.Contains(name);
- }
- public object GetPrimitiveObject(object name)
- {
- return json[name];
- }
- public object GetReferenceObject(object name, Type type, DTopConvert convert)
- {
- IDictionary dict = json[name] as IDictionary;
- if (dict != null && dict.Count > 0)
- {
- return convert(new TopJsonReader(dict), type);
- }
- else
- {
- return null;
- }
- }
- public IList GetListObjects(string listName, string itemName, Type type, DTopConvert convert)
- {
- IList listObjs = null;
- IDictionary jsonMap = json[listName] as IDictionary;
- if (jsonMap != null && jsonMap.Count > 0)
- {
- IList jsonList = jsonMap[itemName] as IList;
- if (jsonList != null && jsonList.Count > 0)
- {
- Type listType = typeof(List<>).MakeGenericType(new Type[] { type });
- listObjs = Activator.CreateInstance(listType) as IList;
- foreach (object item in jsonList)
- {
- if (typeof(IDictionary).IsAssignableFrom(item.GetType())) // object
- {
- IDictionary subMap = item as IDictionary;
- object subObj = convert(new TopJsonReader(subMap), type);
- if (subObj != null)
- {
- listObjs.Add(subObj);
- }
- }
- else if (typeof(IList).IsAssignableFrom(item.GetType())) // list or array
- {
- // TODO not support yet
- }
- else // string, bool, long, double, null, other
- {
- listObjs.Add(item);
- }
- }
- }
- }
- return listObjs;
- }
- }
- }
|