Exemplo n.º 1
0
        public static object ReadValue(System.Text.Json.JsonElement elem)
        {
            if (elem.ValueKind == System.Text.Json.JsonValueKind.Object)
            {
                KeyValue[] vals = elem.EnumerateObject().ToList().SelectMany(v => DeSerializeOne(v)).ToArray();
                KeyValues  valv = new KeyValues(); valv.AddRange(vals);
                return(valv);
            }
            else if (elem.ValueKind == System.Text.Json.JsonValueKind.Array)
            {
                // déja géré par DeSerializeOne
                //KeyValue[] vals = elem.Value.EnumerateArray().ToList().Select(v => DeSerializeOne(v)).ToArray();
                //KeyValues valv = new KeyValues(); valv.AddRange(vals);
                //retour = new KeyValue(realname, valv);
                return(null);
            }
            else if (elem.ValueKind == System.Text.Json.JsonValueKind.Null || elem.ValueKind == System.Text.Json.JsonValueKind.Undefined)
            {
                return(null);
            }
            else if (elem.ValueKind == System.Text.Json.JsonValueKind.False)
            {
                return(false);
            }
            else if (elem.ValueKind == System.Text.Json.JsonValueKind.True)
            {
                return(true);
            }
            else if (elem.ValueKind == System.Text.Json.JsonValueKind.Number)
            {
                int i = 0;
                if (elem.TryGetInt32(out i))
                {
                    return(i);
                }

                long li = 0;
                if (elem.TryGetInt64(out li))
                {
                    return(li);
                }

                double di = 0;
                if (elem.TryGetDouble(out di))
                {
                    return(di);
                }

                return(elem.GetRawText()); // !!!
            }
            else if (elem.ValueKind == System.Text.Json.JsonValueKind.String)
            {
                return(elem.GetString());
            }
            else
            {
                return(elem.GetRawText());
            }
        }