Пример #1
0
        /// <summary>
        /// Converts data into JSON for computer graphics
        /// </summary>
        public void ToJSON()
        {
            IJSONDocument  doc = JSONDocument.CreateDocument();
            IJSONItemArray arr = doc.CreateItemArray();

            foreach (Beam b in this.GetAllProperties())
            {
                IJSONItem o = b.ToJSON(doc);
                arr.Add(o);
            }
        }
Пример #2
0
 public JSONDocumentImpl(IJSONItem root = null)
 {
     this.Root = root;
 }
Пример #3
0
 public bool TryGetValue(string key, out IJSONItem value)
 {
     return(items.TryGetValue(key, out value));
 }
Пример #4
0
 public void Add(string key, IJSONItem value)
 {
     items.Add(key, value);
 }
Пример #5
0
 public bool Remove(IJSONItem item)
 {
     return(items.Remove(item));
 }
Пример #6
0
 public bool Contains(IJSONItem item)
 {
     return(items.Contains(item));
 }
Пример #7
0
 public void Add(IJSONItem item)
 {
     items.Add(item);
 }
Пример #8
0
 public void Insert(int index, IJSONItem item)
 {
     items.Insert(index, item);
 }
Пример #9
0
 public int IndexOf(IJSONItem item)
 {
     return(items.IndexOf(item));
 }
Пример #10
0
        private object MapItem(IJSONItem item, Type expectedType)
        {
            switch (item.ItemType)
            {
            case JSONItemType.String:
                if (expectedType == typeof(string))
                {
                    return(((IJSONItemString)item).Value);
                }
                throw new InvalidOperationException();

            case JSONItemType.Array:
            {
                var itemArr = (IJSONItemArray)item;
                if (expectedType.IsArray && expectedType.GetArrayRank() == 1)
                {
                    var ret = Array.CreateInstance(expectedType.GetElementType(), itemArr.Count);
                    for (int i = 0; i < itemArr.Count; i++)
                    {
                        var subItem = MapItem(itemArr[i], expectedType.GetElementType());
                        ret.SetValue(subItem, i);
                    }
                    return(ret);
                }
                else
                {
                    throw new InvalidOperationException("array expected");
                }
            }

            case JSONItemType.Object:
            {
                var destObj = Activator.CreateInstance(expectedType);
                LoadObject(destObj, (IJSONItemObject)item);
                return(destObj);
            }

            case JSONItemType.Number:
                if (expectedType == typeof(Int32) && ((IJSONItemNumber)item).IsInt)
                {
                    return(((IJSONItemNumber)item).GetAsInt());
                }
                if (expectedType == typeof(long) && ((IJSONItemNumber)item).IsLong)
                {
                    return(((IJSONItemNumber)item).GetAsLong());
                }
                if (expectedType == typeof(double) && ((IJSONItemNumber)item).IsDouble)
                {
                    return(((IJSONItemNumber)item).GetAsInt());
                }
                if (expectedType == typeof(string))
                {
                    return(((IJSONItemNumber)item).Value);
                }

                throw new InvalidOperationException();

            case JSONItemType.Null:
                return(null);

            case JSONItemType.Bool:
                return(((IJSONItemBool)item).Value);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Пример #11
0
 /// <summary>
 /// create a document
 /// </summary>
 /// <param name="root">optional root item</param>
 /// <returns></returns>
 public static IJSONDocument CreateDocument(IJSONItem root = null)
 {
     return(new JSONDocumentImpl(root));
 }
Пример #12
0
        private void WriteElement(IJSONItem item, TextWriter writer)
        {
            switch (item.ItemType)
            {
            case JSONItemType.String:
                writer.Write('"');
                writer.Write(EscapeString(((IJSONItemString)item).Value));
                writer.Write('"');
                break;

            case JSONItemType.Array:
                writer.Write('[');
                for (int i = 0; i < ((IJSONItemArray)item).Count; i++)
                {
                    if (i > 0)
                    {
                        writer.Write(',');
                    }
                    WriteElement(((IJSONItemArray)item)[i], writer);
                }
                writer.Write(']');
                break;

            case JSONItemType.Object:
                writer.Write('{');
                int c = 0;
                foreach (var kv in ((IJSONItemObject)item))
                {
                    if (c++ > 0)
                    {
                        writer.Write(',');
                    }
                    writer.Write('"');
                    writer.Write(EscapeString(kv.Key));
                    writer.Write("\":");
                    WriteElement(kv.Value, writer);
                }
                writer.Write('}');
                break;

            case JSONItemType.Number:
                writer.Write(((IJSONItemNumber)item).Value);
                break;

            case JSONItemType.Null:
                writer.Write("null");
                break;

            case JSONItemType.Bool:
                if (((IJSONItemBool)item).IsTrue)
                {
                    writer.Write("true");
                }
                else
                {
                    writer.Write("false");
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }