提问人:Darrell 提问时间:11/13/2023 最后编辑:Darrell 更新时间:11/13/2023 访问量:67
C# Refit 在需要类时将 False 反序列化为 Null
C# Refit Deserialize False to Null when expecting Class
问:
以下是登录时收到的 2 个 json 响应示例...
对于成功的响应,有效负载是具有 id 和 name 的类
{
"merchant": "test123",
"payload": {
"id": "1234",
"name": "Test"
},
"code": "100",
"message": "Request successfully executed"
}
...但如果响应不成功,我会收到以下内容......
{
"merchant": "test123",
"payload": false,
"code": "105",
"message": "Invalid username or password!"
}
我无法控制接收“有效负载”:false。理想情况下,这将是“有效负载”:null。
在反序列化响应时,如何将“payload”: false 更改为 “payload”: null?当前在运行时出现异常错误。使用 C# 和 refit。
using System.Text.Json;
namespace Response;
public class ResponseRoot
{
public string Merchant { get; set; }
//the value received in the json response needs to become null if the value is false?
public ResponsePayload? Payload { get; set; }
public string Code { get; set; }
public string Message { get; set; }
public class ResponsePayload
{
public string Id { get; set; }
public string Name { get; set; }
}
}
答:
0赞
Serge
11/13/2023
#1
您可以先解析
var jObj = JsonObject.Parse(json);
if (jObj["payload"].ToString() == "false") jObj["payload"] = null;
ResponseRoot rb = System.Text.Json.JsonSerializer.Deserialize<ResponseRoot>(jObj, new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
});
如果您有时间和愿望,可以将此代码包装在函数或自定义 JSON 转换器中。
评论
0赞
Darrell
11/13/2023
嗨,塞尔。感谢您的建议,但您知道这是否可通过改装来实现吗?感谢
0赞
Serge
11/13/2023
尝试使用 JObject 类而不是 ResponseRoot,并让我知道它是否有效
评论
bool
null
ToString()
SystemTextJsonContentSerializer
"payload"
false