//System.Text.Json 사용
public static dynamic DeserializeJson(string s) {
return Parse(JsonDocument.Parse(s).RootElement);
static dynamic Parse(JsonElement e)
=> e.ValueKind switch {
JsonValueKind.Array => e.EnumerateArray().Select(Parse).ToArray(),
JsonValueKind. => Parse(e),
JsonValueKind.String => e.GetString(),
JsonValueKind.Number => e.GetDecimal(),
JsonValueKind.True => true,
JsonValueKind.False => false,
_ => null};
static dynamic Parse(JsonElement e) {
IDictionary<string, > obj = new Expando();
foreach(var i in e.Enumerate())
obj.Add(i.Name, Parse(i.Value));
return obj;
}
}
//System.Json 사용
public static dynamic DeserializeJson2(string s) {
return Parse(JsonValue.Parse(s));
static dynamic Parse(JsonValue e)
=> e.JsonType switch {
JsonType.Array => ((JsonArray)e).Select(Parse).ToArray(),
JsonType. => Parse((Json)e),
JsonType.String => (string)e,
JsonType.Number => (decimal)e,
JsonType.Boolean => (bool)e,
_ => null};
static dynamic Parse(Json e) {
IDictionary<string, > obj = new Expando();
foreach(var i in e)
obj.Add(i.Key, Parse(i.Value));
return obj;
}
}
사용법
var json = DeserializeJson2("{"arr":[1, 2, 3, 4, 5], "t":true, "f":false, "s":"strings...", "i":1234567}");
foreach(var i in json.arr) Console.WriteLine(i);
Console.WriteLine(json.t);
Console.WriteLine(json.f);
Console.WriteLine(json.s);
Console.WriteLine(json.i);
디시 API 파싱하면서 맹글어봄.
근데 그냥 다른 라이브러리 쓰는게 더 편함
댓글 0