将JSON属性反序列化为不同的类属性

时间:2019-05-09 12:47:57

标签: c# json.net deserialization json-deserialization

我收到来自第三方的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;

这不是很理想,我知道。

1 个答案:

答案 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
}