我有一个班级
A
,其中有一个字段 string data
。
我执行一个服务器请求,获取一个 json 文本,我将其转换为
A
:
var a = JsonConvert.DeserializeObject<A>(jsonResponse);
问题是有时
data
作为字符串出现(例如:Ball
),有时它作为 json 对象出现,如下所示:
"data" : {
"field1" : "Ball",
"field2" : "Foo"
}
这会破坏反序列化,因为字段
data
需要一个字符串。
有没有办法从 json 文本中捕获
data
作为字符串,即使它作为 json 对象出现?
以这样的事情作为起点怎么样? (受到 .NET TryParse 方法的启发):
public static bool TryDeserialize<T>(string jsonString, out T result)
{
try
{
result = JsonConvert.DeserializeObject<T>(jsonString)!;
return result is not null;
}
catch
{
result = default!;
return false;
}
}
然后你可以像这样使用它:
if (TryDeserialize<YourObjectModel>(jsonString, out YourObjectModel result))
{
Console.WriteLine($"result is {result.Field1}");
}
else
{
Console.WriteLine($"{nameof(jsonString)} value is {jsonString}");
}