【发布时间】:2021-05-19 12:42:05
【问题描述】:
我正在使用System.Text.Json 反序列化一些 json。 (更具体地说,this call 来自 json 格式的 Last.fm API)
我试图反序列化的 json 有一种非常规的方式来处理某些对象的 null 值,例如当它为 null 时,我得到这个:
"tags": "",
当它有值时是这样的:
"tags": {
"tag": [
{
"name": "classic rock",
"url": "https://www.last.fm/tag/classic+rock"
},
{
"name": "rock",
"url": "https://www.last.fm/tag/rock"
}
]
}
我的 C# 类如下所示:
public class Artist
{
public Tags Tags { get; set; }
}
public class Tags
{
public Tag[] Tag { get; set; }
}
public class Tag
{
public string Name { get; set; }
public string Url { get; set; }
}
在实际尝试反序列化之前如何检查对象是否为空字符串?
当我尝试反序列化它时:
var deserializedObject = JsonSerializer.Deserialize<T>(requestBody);
它会引发 System.Text.Json.JsonException: The JSON value could not be converted to FMBot.LastFM.Domain.Models.Tags. Path: $.artist.tags 错误。
当值实际上是null 时,这个调用曾经有效,但现在它是一个空字符串,它被破坏了,我无法找到解决方案。
【问题讨论】:
-
对于公共 API 来说,像这样从根本上改变是非常糟糕的形式 - 对 last.fm 感到羞耻。话虽如此,您将需要编写
JsonConverter来明确处理这种情况。见:docs.microsoft.com/en-us/dotnet/standard/serialization/…
标签: c# .net-5 system.text.json last.fm