【问题标题】:C# Entity Framework MVC Web APIC# 实体框架 MVC Web API
【发布时间】: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


【解决方案1】:

修复了日期问题:

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

        }

一旦我将类型设置为数组,然后将查询转换为数组并返回它的工作方式与我的预期非常相似!

虽然我没有得到可靠的答案,但你们都帮我找到了方向!非常感谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2020-05-26
    • 2012-08-09
    • 2013-03-12
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多