如何创建具有不同类型的JSON数据模型

我正在调用一个API,该API返回以下响应

{
    "data": {
        "name": "John",
        "score": 51
    },
    "ret": 0
}

发生错误时,响应变为

{
    "data": "error message",
    "ret": 1
}

注意,“ data”属性从对象到字符串都不同。

现在,我可以使用JsonConverter返回不同类型的不同类,问题是保存此响应的模型。即如果我使用

public class MyResponse
{
    [JsonConverter(typeof(MyResponseType))]
    [JsonProperty(PropertyName = "data")]
    public MyResponseType Data { get; set; }

    [JsonProperty(PropertyName = "ret")]
    public int ReturnCode { get; set; }
}

MyResponseType当然可以容纳一个对象,但是不能强制转换为字符串。

我试图使用通用类型来保存数据

public class MyReponse<T>
{
    [JsonProperty(PropertyName = "data")]
    public T Data { get; set; }

    [JsonProperty(PropertyName = "ret")]
    public int ReturnCode { get; set; }
}

但是,这又带来了另一个问题,.Net Core中的服务使用了该MyReponse类,其中该服务是通过ConfigureServices步骤中的依赖项注入来初始化的,这不允许传递泛型。因此,我陷入了另一个困境。

关于如何创建可以处理这种情况的适当数据模型的任何建议?

评论
回忆那么真
回忆那么真

因此,假设发生错误时“ ret”值为1,我能想到的最简单的解决方案是在投射之前检查该属性。

所以你可以有两个模型

public class MyResponse
{
    [JsonConverter(typeof(MyResponseType))]
    [JsonProperty(PropertyName = "data")]
    public MyResponseType Data { get; set; }

    [JsonProperty(PropertyName = "ret")]
    public int ReturnCode { get; set; }
}

public class MyErrorResponse
{
    [JsonProperty(PropertyName = "data")]
    public string Data { get; set; }

    [JsonProperty(PropertyName = "ret")]
    public int ReturnCode { get; set; }
}

然后决定您应该使用哪种类型。

点赞
评论