/// <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); } }
public JSONDocumentImpl(IJSONItem root = null) { this.Root = root; }
public bool TryGetValue(string key, out IJSONItem value) { return(items.TryGetValue(key, out value)); }
public void Add(string key, IJSONItem value) { items.Add(key, value); }
public bool Remove(IJSONItem item) { return(items.Remove(item)); }
public bool Contains(IJSONItem item) { return(items.Contains(item)); }
public void Add(IJSONItem item) { items.Add(item); }
public void Insert(int index, IJSONItem item) { items.Insert(index, item); }
public int IndexOf(IJSONItem item) { return(items.IndexOf(item)); }
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(); } }
/// <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)); }
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(); } }