我收到来自第三方的API响应,这些响应的类型不明确。对于某些方法是:
{"error":{"message":"Resource is already part of this app","status_code":400}}
在其他电话上是:
{"error": "Resource is already part of this app" }
是否可以将此类响应反序列化为类似的内容:
public class Response
{
[JsonProperty("error")]
public string Error { get; set; }
[JsonIgnore] //[JsonProperty("error")]
public ObjectError ObjectError { get; set; }
}
public class ObjectError
{
[JsonProperty("message")]
public string Message { get; set; }
[JsonProperty("status_code")]
public string StatusCode { get; set; }
}
更新
所以我最终将对象用作反序列化的全部捕获。
[JsonProperty("error")]
public object Error { get; set; }
public string ErrorAsString => Error is string ? Error.ToString() : null;
public ObjectError ErrorAsObject => Error is string ? null : Error != null ? JsonConvert.DeserializeObject<ObjectError>(Error.ToString()) : null;
这不是很理想,我知道。
答案 0 :(得分:0)
您可以使用NetwosoftJson轻松地做到这一点。 Here,您可以检查如何使用该对象反序列化为对象。
您始终可以解析JSON对象并检查它是否具有特定字段。例如:
JObject json = JObject.Parse(jsonString);
if(json.HasKey("message"))
{
var result = JsonConvert.DeserializeObject<ObjectError>(jsonString);
// Do some stuff here
}
else
{
var result = JsonConvert.DeserializeObject<Response>(jsonString);
// Do some stuff here
}