示例#1
0
        private JToken ItemToJson(StackItemBase item)
        {
            if (item == null)
            {
                return(null);
            }

            JToken value;

            using (item)
            {
                switch (item.Type)
                {
                case EStackItemType.Bool: value = new JValue((bool)item.ToObject()); break;

                case EStackItemType.Integer: value = new JValue(item.ToObject().ToString()); break;

                case EStackItemType.ByteArray: value = new JValue((byte[])item.ToObject()); break;

                case EStackItemType.Interop: value = new JValue(item.ToObject().ToString()); break;

                case EStackItemType.Struct:
                case EStackItemType.Array:
                {
                    var array  = (ArrayStackItemBase)item;
                    var jarray = new JArray();

                    foreach (var entry in array)
                    {
                        jarray.Add(ItemToJson(entry));
                    }

                    value = jarray;
                    break;
                }

                case EStackItemType.Map:
                {
                    var dic  = (MapStackItemBase)item;
                    var jdic = new JObject();

                    foreach (var entry in dic)
                    {
                        jdic.Add(entry.Key.ToByteArray().ToHexString(true), ItemToJson(entry.Value));
                    }

                    value = jdic;
                    break;
                }

                default: throw new NotImplementedException();
                }

                return(new JObject
                {
                    ["type"] = item.Type.ToString(),
                    ["value"] = value
                });
            }
        }