在WebAPI项目中挂载JSON答案

时间:2017-11-30 17:24:41

标签: json asp.net-web-api

在我的项目中,我正在开发WebService(使用带有EF6的WebAPI 2)。此服务应返回JSON消息,它是。但该消息是一种不方便的格式。

控制器是:

public class Arguments
{
    public int arg1{ get; set; }
    public int arg2{ get; set; }
}

[Route("webroute")]
[HttpPost]
[AcceptVerbs("POST")]
public IHttpActionResult FindTodos(Arguments args)
{
    return Ok(_repo.BuscaOrdens(args.arg1, args.arg2));
}

repo方法如下:

public object FindTodos(int arg1, int arg2)
    {
        dynamic nextDeadlines = _ctx.Todos
            .Where(o => o.field1 == arg1 && o.field2 == arg2)
            .OrderByDescending(o => o.field3)
            .ThenBy(o => o.ts)
            .Take(10)
            .Select(x => new
            {
                x.Field4,
                x.Field5
            }).ToList();

        dynamic delayed = _ctx.Todos
            .Where(o => o.field1 == arg1 && o.field2 == arg2)
            .OrderBy(o => o.field3)
            .ThenByDescending(o => o.ts)
            .Take(10)
            .Select(x => new
            {
                x.Field4,
                x.Field5
            }).ToList();

        return new List<object> { new List<object> {"NextDeadlines", nextDeadlines}, new List<object> { "Delayed", delayed} };
    }

它给我的JSON返回是:

[
    [
        "NextDeadlines",
        [
            {
                "Field4": 2000,
                "Field5": 1.05
            },
            {
                "Field4": 1000,
                "Field5": 1
            }
        ]
    ],
    [
        "Delayed",
        [
            {
                "Field4": 500,
                "Field5": 1.1111111111111112
            }
        ]
    ]
]

最后我期待得到的是这样的:

[
    "NextDeadlines":
    [
        {
            "Field4": 2000,
            "Field5": 1.05
        },
        {
            "Field4": 1000,
            "Field5": 1
        }
    ],
    "Delayed":
    [
        {
            "Field4": 500,
            "Field5": 1.1111111111111112
        }
    ]
]

关于要纠正什么的任何想法?

提前致谢! 埃里希

1 个答案:

答案 0 :(得分:1)

首先,您期望的json无效。我怀疑你的意思是

[
  {
    "NextDeadlines":
    [
        {
            "Field4": 2000,
            "Field5": 1.05
        },
        {
            "Field4": 1000,
            "Field5": 1
        }
    ],
    "Delayed":
    [
        {
            "Field4": 500,
            "Field5": 1.1111111111111112
        }
    ]
  }
]

如果是这种情况,则需要将最后一行修改为

    return new List<object> { new List<object> {"NextDeadlines", nextDeadlines}, new List<object> { "Delayed", delayed} };

    return new List<object> { new {NextDeadlines = nextDeadlines}, new { Delayed = delayed} };