2014-10-20 3 views
0

Я искал и искал и не могу найти ответы. Надеюсь, вы все можете помочь.C# Entity Framework MVC Web API

Я создаю приложение MVC WebAPI на C#.

Я добавил соединение DB с использованием Entity Framework и могу вызвать его и загрузить переменную с данными.

Моя проблема в том, что я пытаюсь вернуть данные в формате 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 ... –

+1

Вы слишком задумываетесь об этом. WebApi не требует, чтобы вы возвращали сырой JSON, вы должны возвращать литералы, и они будут сериализованы в JSON. –

+0

В течение дат я бы создал класс viewmodel с свойствами 'DateTime?'. Когда вы переходите из модели db в viewmodel, присваиваете значение null или используйте ['DateTime.ToString (строковый формат)'] (http://msdn.microsoft.com/en-us/library/zdtaw1bw (v = vs.110) .aspx) вместо этой конкатенации строк. –

ответ

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(); 
      } 

     } 

После того, как я установил тип как массив, а затем преобразуется запрос в массив и вернулся, что он работает очень много, как я ожидал, что это!

Хотя я не получил твердого ответа, вы все помогли мне найти мой путь! Благодаря тонну!!

Смежные вопросы