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());
            }
        }
Exemplo n.º 2
0
        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());
            }
        }