在web api中处理不同类型的JSON post请求

时间:2018-01-23 05:41:26

标签: c# json api web

我的解决方案中有多个Json实体。例如:

[DbName("school")]
public class School
{
    [JsonProperty("type")]
    public string Type{ get; set; }

    [JsonProperty("name")]
    public string Name{ get; set; }

    [JsonProperty("city")]
    public string City{ get; set; }
}

[DbName("hospital")]
public class Hospital
{
    [JsonProperty("type")]
    public string Type{ get; set; }

    [JsonProperty("name")]
    public string Name{ get; set; }

    [JsonProperty("city")]
    public string City{ get; set; }
}

我有一个处理帖子请求的web api。请求来自JSON而不是字符串。我需要编写一个方法来处理所有请求,然后我将决定即将到来的对象的json类型:

[HttpPost]
public ActionResult CommonMethod(dynamic jsonObj)
{
    if(jsonObj.Type == "health")
        Hospital hospital = ConvertDynamicJson(jsonObj, hospital);
    else if(jsonObj.Type == "education")
        School school = ConvertDynamicJson(jsonObj, school);

    ...
}

我看到很多关于动态json转换的例子,但几乎所有的例子都使用字符串json数据。

由于

1 个答案:

答案 0 :(得分:1)

  

请求来自JSON而不是字符串

我假设你试图告诉动作选择器解析的请求并作为对象传递。它不再是Json格式化的字符串。

此外,您无法像这样确定动态对象。您可以合并模型,而不是尝试使用动态对象。

public class CommonActionInput
{
    public School School{ get; set; }

    public Hospital Hospital{ get; set; }
}

您可以确定将哪个对象传递给操作。

ActionResult CommonMethod(CommonActionInput input)
{
    if(input.School != null)
    {

    }
    if(input.Hospital != null)
    {

    }
}