如何解决System.Text.Json检查数组是否为空
我刚刚使用Sytem.Text.Json。
如何检查subscriptions
数组是否为空或null
?
JSON:
{
"user": {
"id": "35812913u","subscriptions": [] //check if null
}
}
这就是我要检查的是否为空。
if (subscriptions != null) {
}
解决方法
首先,您应该具有一些将JSON反序列化为的类:
public class Rootobject
{
public User User { get; set; }
}
public class User
{
public string Id { get; set; }
public string[] Subscriptions { get; set; }
}
在我的示例中,我正在从名为data.json
的文件中读取内容,并将其传递给JsonSerializer
,使用Null-conditional operator检查属性是否为空:
private static async Task ProcessFile()
{
var file = Path.Combine(Directory.GetCurrentDirectory(),"data.json");
if (File.Exists(file))
{
var text = await File.ReadAllTextAsync(file);
var result = JsonSerializer.Deserialize<Rootobject>(text,new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
});
if (result?.User?.Subscriptions?.Length > 0)
{
// do something
}
else
{
// array is empty
}
}
}
如果需要从API获取数据,则可以在HttpClient
上使用扩展方法,但我建议使用IHttpClientFactory创建客户端:
var client = new HttpClient();
var result = await client.GetFromJsonAsync<Rootobject>("https://some.api.com");
if (result?.User?.Subscriptions?.Length > 0)
{
// do something
}
else
{
// array is empty
}
您也可以使用JsonDocument
,甚至更好的GetProperty()
方法,也可以使用TryGetProperty()
来做到这一点:
private static async Task WithJsonDocument()
{
var file = Path.Combine(Directory.GetCurrentDirectory(),"data.json");
if (File.Exists(file))
{
var text = await File.ReadAllBytesAsync(file);
using var stream = new MemoryStream(text);
using var document = await JsonDocument.ParseAsync(stream);
var root = document.RootElement;
var user = root.GetProperty("user");
var subscriptions = user.GetProperty("subscriptions");
var subs = new List<string>();
if (subscriptions.GetArrayLength() > 0)
{
foreach (var sub in subscriptions.EnumerateArray())
{
subs.Add(sub.GetString());
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。