gpt4 book ai didi

c# - RestSharp 没有正确反序列化 JSON

转载 作者:行者123 更新时间:2023-11-30 14:49:29 24 4
gpt4 key购买 nike

我正在使用 RestSharp 来使用 REST Web 服务。我已经实现了自己的 Response 对象类,以与集成在 RestSharp 中的自动序列化/反序列化一起使用。

我还添加了一个可以正常工作的带有枚举的映射。

这个类的问题是,当我发送一个正确的请求时,我得到一个正确的响应,所以 Response.Content 包含我所期望的,但是反序列化过程无法正常工作。

响应.内容

{
"resultCode": "SUCCESS",
"hub.sessionId": "95864537-4a92-4fb7-8f6e-7880ce655d86"
}

ResultCode 属性正确映射到 ResultCode.SUCCESS 枚举值,但 HubSessionId 属性始终为 null所以它似乎没有反序列化。

我看到的唯一可能的问题是带有“.”的 JSON PropertyName在名字里。这可能是问题所在吗?这是否与不再是 Newtonsoft.Json 的新 JSON Serializer 有关?我该如何解决?

更新

我发现 Json 属性被完全忽略了,[JsonConverter(typeof(StringEnumConverter))] 也是如此。因此我认为枚举映射是由默认的 Serializer 自动执行的,没有任何属性。“hub.sessionId”属性的问题仍然存在。

这是我的代码

public class LoginResponse
{
[JsonProperty(PropertyName = "resultCode")]
[JsonConverter(typeof(StringEnumConverter))]
public ResultCode ResultCode { get; set; }

[JsonProperty(PropertyName = "hub.sessionId")]
public string HubSessionId { get; set; }
}

public enum ResultCode
{
SUCCESS,
FAILURE
}

// Executes the request and deserialize the JSON to the corresponding
// Response object type.
private T Execute<T>(RestRequest request) where T : new()
{
RestClient client = new RestClient(BaseUrl);

request.RequestFormat = DataFormat.Json;

IRestResponse<T> response = client.Execute<T>(request);

if (response.ErrorException != null)
{
const string message = "Error!";
throw new ApplicationException(message, response.ErrorException);
}

return response.Data;
}

public LoginResponse Login()
{
RestRequest request = new RestRequest(Method.POST);
request.Resource = "login";
request.AddParameter("username", Username, ParameterType.GetOrPost);
request.AddParameter("password", Password, ParameterType.GetOrPost);
LoginResponse response = Execute<LoginResponse>(request);
HubSessionId = response.HubSessionId; // Always null!
return response;
}

最佳答案

使用自定义 JSON SerializerDeserializer 解决,在 Newtonsoft 的 JSON.NET 案例中。我按照此 article 中解释的步骤进行操作菲利普·瓦格纳 (Philipp Wagner) 着。

我还注意到,使用默认的 SerializerRequest 进行序列化并没有像预期的那样使用枚举。它不是序列化枚举字符串值,而是放置从我的枚举定义中获取的枚举 int 值。

现在使用 JSON.NET,序列化和反序列化过程可以正常工作。

关于c# - RestSharp 没有正确反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38591048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com