如何使用Json File作为webapi的数据源

时间:2018-03-20 19:31:46

标签: json asp.net-web-api

我想使用Json文件作为数据源,使用webapi从Json文件中检索数据。

在控制器中,我添加了以下代码:

API="http://localhost:4741"
URL_PATH="/jobs"

curl "${API}${URL_PATH}" \
  --include \
  --request POST \
  --header "Content-Type: application/json" \
  # --header "Authorization: Token token=${TOKEN}" \
   --data '{
    "job": {
      "url": "'"${URL}"'"
    }
  }'

echo

在模型中,

Public HttpResponseMessage Get()
{
    var json = File.ReadAllText(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data\Bim.Json"));

      return new HttpResponseMessage()
    {
        Content = new StringContent(json, Encoding.UTF8, "application/json"),
        StatusCode = HttpStatusCode.OK
    };
}

实际上,我想使用位于app_data文件夹中的json文件,如何从JSON文件中读取数据?我是webApi的新手,所以如果专家可以发布整个工作代码或尽可能多的详细信息,那将会非常有用。

1 个答案:

答案 0 :(得分:1)

如果我是正确的,我相信您希望将json文本文件反序列化为模型类,然后将它们序列化为json以供客户端使用。

为此,您可以使用https://www.nuget.org/packages/newtonsoft.json/来帮助您。按照说明安装软件包。

一旦你这样做,你可以编写一个函数,如

public bimModel Get()
{
    var json = File.ReadAllText(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data\Bim.Json"));
    var model = JsonConvert.DeserializeObject<bimModel>(json);

    return model;
}

如果您的json文件是bimModels的数组,则可以将DeserializeObject的返回类型和类型参数更改为List<bimModel>

为确保您的服务器将json返回给客户端,请确保您的WebApiConfig班级正在使用JsonMediaTypeFormatter

public static void Register(HttpConfiguration config)
{
    config.MapHttpAttributeRoutes();
    config.Formatters.Clear();
    config.Formatters.Add(new JsonMediaTypeFormatter());
    config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
    config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
}

当然,请务必加入using Newtonsoft.Json;using Newtonsoft.Json.Serialization;