【发布时间】:2014-10-20 21:07:10
【问题描述】:
我已经搜索和搜索,但找不到任何答案。希望大家能提供帮助。
我正在用 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 的网站都将不胜感激。其次,为什么一切都用“\”转义?有什么办法可以关闭吗?
【问题讨论】:
-
你想多了。 WebApi 不要求您返回原始 JSON,您应该返回文字类型,这些类型将被序列化为 JSON。
-
对于日期,我将创建一个带有
DateTime?属性的视图模型类。当您从 db 模型映射到 viewmodel 时,分配 null 或使用DateTime.ToString(string format)而不是该字符串连接。 -
您正在查看调试器中引号被转义的字符串,因为它是一个 .NET 字符串值。如果您在 Chrome 中使用 Postman 之类的东西,您将看不到反斜杠。
-
@Craig W.:使用 Postman 我仍然会得到反斜杠...我还在另一个盒子上使用 WGET 进行测试并将它们也带到那里。
-
@JasonP 你能详细说明一下吗?
标签: c# json entity-framework asp.net-mvc-4