2015-07-12 111 views
3

以下是我的代码段的正常工作,我的查询下面的代码:如何使用外部JSON文件作为数据源的WebAPI

型号:

namespace CVHub.Models 
{ 
    [DataContract] 
    public class Context 
    { 
     [DataMember] 
     public int sessionID { get; set; } 
     [DataMember] 
     public string Name { get; set; } 

     public static List <Context> Contexts= new List<Context> 
     { 

      new Context{sessionID=1,Name="Name1"}, 
      new Context {sessionID=2,Name="Name2"}, 
      new Context {sessionID=3,Name="Name3"} 
     }; 
    } 
} 

控制器:

namespace CVHub.Controllers 
{ 
    public class ContextController : ApiController 
    { 
     List<Context> items; 
     // GET api/values 
     public IEnumerable<Context> Get() 
     { 
      //return Context.Contexts; 
      return items; 
     } 
    } 
} 

问题:我想使用外部json文件(驻留在app_data文件夹中)来提供相同的数据而不是做new Context{sessionID=1,Name="Name1"}, 如何使用从json文件中读取的数据?我对MVC和webApi非常陌生,所以如果专家可以发布整个工作代码或尽可能多的细节,这将会非常有帮助。

+0

所以,你不知道如何读取文件?或者你不知道如何根据你阅读的json来填充你的模型属性? –

+0

我不知道如何使用从外部json文件读取的数据填充模型属性。 – onlynitins

回答

6

您可以将您的JSON文件加载到StringContent中返回HttpResponseMessage

public class JsonFileController : ApiController 
{ 
    public HttpResponseMessage Get() 
    { 
     var json = File.ReadAllText(Server.MapPath(@"~/App_Data/contexts.json"); 

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

的App_Data/contexts.json

[ 
    { 
     "sessionId": 1, 
     "name": "name1" 
    }, 
    { 
     "sessionId": 2, 
     "name": "name2" 
    }, 
    { 
     "sessionId": 3, 
     "name": "name3" 
    } 
] 
+0

有趣,我会给它一个镜头。请让我知道在这种情况下模型会是什么样子。 – onlynitins

+0

它会返回你的.json文件,所以你的.json文件中将会返回。所以这应该包含有效的json – Martin

+0

非常感谢你,你的解决方案为我工作:) – onlynitins

相关问题