2014-10-20 55 views
0

我已经搜索和搜索并找不到任何答案。希望你们都能有所帮助。C#实体框架MVC Web API

我在C#中构建了一个MVC WebAPI应用程序。

我加入了使用实体框架的数据库连接和我能够把它和加载变量与数据。

我的问题是,我试图返回JSON格式的数据(我已经添加的代码行到我的WebApiConfig.cs文件默认为text/html)。

这里是我的代码:

public string Get(string id) 
    { 
     string userName = id.ToString(); 

     using (var db = new SDCLogins()) 
     { 
      var query = from logins in db.logins 
         join loginTypes in db.loginTypes on new { loginType = logins.loginType } equals new { loginType = loginTypes.loginTypeID } 
         where 
          logins.uname == userName 
         select new 
         { 
          logins.login1, 
          startDate = SqlFunctions.DatePart("mm", logins.startDate) + "/" + 
          SqlFunctions.DateName("dd", logins.startDate) + "/" + 
          SqlFunctions.DateName("yyyy", logins.startDate), 
          stopDate = SqlFunctions.DatePart("mm", logins.stopDate) + "/" + 
          SqlFunctions.DateName("dd", logins.stopDate) + "/" + 
          SqlFunctions.DateName("yyyy", logins.stopDate), 
          createdDate = SqlFunctions.DatePart("mm", logins.createdDate) + "/" + 
          SqlFunctions.DateName("dd", logins.createdDate) + "/" + 
          SqlFunctions.DateName("yyyy", logins.createdDate), 
          logins.createdBy, 
          loginTypes.loginDescription 
         }; 


      return Json.Encode(query); 
     } 

    }  

当我执行我得到的回应是比任何JSON不同我见过之前:

"[{\"login1\":\"akamau001\",\"startDate\":\"1/24/2014\",\"stopDate\":\"//\",\"createdDate\":\"10/3/2014\",\"createdBy\":\"ozzie\",\"loginDescription\":\"Login Type 1\"},{\"login1\":\"123D56\",\"startDate\":\"1/1/1900\",\"stopDate\":\"//\",\"createdDate\":\"10/3/2014\",\"createdBy\":\"ozzie\",\"loginDescription\":\"Login Type 2\"}]"  

首先的//是我的方式处理日期,任何有关如何使这些返回null值得赞赏。其次为什么一切都以“\”逃脱?有什么办法可以解决这个问题吗?

+0

MVC!=的WebAPI ... – 2014-10-20 21:11:13

+1

你这个得太多。 WebApi不要求你返回原始的JSON,你应该返回字面类型,这些将被序列化成JSON。 – 2014-10-20 21:11:19

+0

对于日期,我会创建一个具有'DateTime?'属性的viewmodel类。当你从数据库模型映射到视图模型时,分配null或使用['DateTime.ToString(string format)'](http://msdn.microsoft.com/en-us/library/zdtaw1bw(v = vs.110) .aspx)而不是该字符串连接。 – 2014-10-20 21:17:05

回答

0

由固定日期的问题:

startDate = logins.startDate.HasValue ? (object) logins.startDate.Value.ToShortDateString() : DBNull.Value, 
stopDate = logins.stopDate.HasValue ? (object) logins.stopDate.Value.ToShortDateString() : DBNull.Value, 
createdDate = logins.createdDate.HasValue ? (object) logins.createdDate.Value.ToShortDateString() : DBNull.Value 

现在不转出是否有值,或者如果没有。

还在为JSON问题:

public Array Get(string id) 
     { 
      //return "value"; 
      string userName = id.ToString(); 

      using (var db = new SDCLogins()) 
      { 
       var query = from logins in db.logins.AsEnumerable() 
          join loginTypes in db.loginTypes on new { loginType = logins.loginType } equals new { loginType = loginTypes.loginTypeID } 
          where 
           logins.uname == userName 
          select new 
          { 
           logins.login1, 
           startDate = logins.startDate.HasValue ? (object) logins.startDate.Value.ToShortDateString() : DBNull.Value, 
           stopDate = logins.stopDate.HasValue ? (object) logins.stopDate.Value.ToShortDateString() : DBNull.Value, 
           createdDate = logins.createdDate.HasValue ? (object) logins.createdDate.Value.ToShortDateString() : DBNull.Value, 
           logins.createdBy, 
           loginTypes.loginDescription 
          }; 

       return query.ToArray(); 
      } 

     } 

一旦我设定的类型为数组,然后转换查询数组并返回它的工作原理非常像我预期!

虽然我没有得到一个坚实的答案大家帮我找到我的路!万分感谢!!