public static OSD DeserializeJson(JsonData json) { if (json == null) { return(new OSD()); } switch (json.GetJsonType()) { case JsonType.Boolean: return(OSD.FromBoolean((bool)json)); case JsonType.Int: return(OSD.FromInteger((int)json)); case JsonType.Long: return(OSD.FromLong((long)json)); case JsonType.Double: return(OSD.FromReal((double)json)); case JsonType.String: string str = (string)json; if (String.IsNullOrEmpty(str)) { return(new OSD()); } else { return(OSD.FromString(str)); } case JsonType.Array: OSDArray array = new OSDArray(json.Count); for (int i = 0; i < json.Count; i++) { array.Add(DeserializeJson(json[i])); } return(array); case JsonType.Object: OSDMap map = new OSDMap(json.Count); IDictionaryEnumerator e = ((IOrderedDictionary)json).GetEnumerator(); while (e.MoveNext()) { map.Add((string)e.Key, DeserializeJson((JsonData)e.Value)); } return(map); case JsonType.None: default: return(new OSD()); } }
public static OSD DeserializeJson(JsonData json) { switch (json.GetJsonType()) { case JsonType.Boolean: return(OSD.FromBoolean((bool)json)); case JsonType.Int: return(OSD.FromInteger((int)json)); case JsonType.Long: return(OSD.FromLong((long)json)); case JsonType.Double: return(OSD.FromReal((double)json)); case JsonType.String: string str = (string)json; if (String.IsNullOrEmpty(str)) { return(new OSD()); } else { switch (str[0]) { case 'd': if (str.StartsWith("date::")) { DateTime dt; if (DateTime.TryParse(str.Substring(6), out dt)) { return(OSD.FromDate(dt)); } } break; case 'u': if (str.StartsWith("uuid::")) { UUID id; if (UUID.TryParse(str.Substring(6), out id)) { return(OSD.FromUUID(id)); } } else if (str.StartsWith("uri::")) { try { Uri uri = new Uri(str.Substring(5)); return(OSD.FromUri(uri)); } catch (UriFormatException) { } } break; case 'b': if (str.StartsWith("b64::")) { try { byte[] data = Convert.FromBase64String(str.Substring(5)); return(OSD.FromBinary(data)); } catch (FormatException) { } } break; } return(OSD.FromString((string)json)); } case JsonType.Array: OSDArray array = new OSDArray(json.Count); for (int i = 0; i < json.Count; i++) { array.Add(DeserializeJson(json[i])); } return(array); case JsonType.Object: OSDMap map = new OSDMap(json.Count); foreach (KeyValuePair <string, JsonData> kvp in json) { map.Add(kvp.Key, DeserializeJson(kvp.Value)); } return(map); case JsonType.None: default: return(new OSD()); } }