如何防止C#在我的测试控制器中包装我的JSON输出?

CHY*_*CHY 3 c# json asp.net-core-mvc

Visual Studio和C#的新手.我正在为.Net Core/MVC React-Redux应用程序(其他人正在研究模型和控制器)的UI工作,作为开发的一部分,我想连接测试控制器以输出我正在阅读的一些JSON从文本文件.

它正在工作,除了C#将我的控制器输出JSON包装在另一组括号中,导致在React中消耗JSON的问题.

我的测试控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;

namespace AGDemo.Controllers
{
    [Produces("application/json")]
    [Route("api/Versions")]
    public class VersionsController : Controller
    {
        // GET: api/Versions
        [HttpGet]
        public IEnumerable<JsonResult> Get()
        {
            var data = System.IO.File.ReadAllText(@"..\AGDemo\Api\JSONVersionData.txt");
            var dataObj = JsonConvert.DeserializeObject(data);
            Console.WriteLine(dataObj)
            yield return Json(dataObj);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

控制台输出:

[
  {
    "VersionCode": "0ODD6109 ",
    "VersionQualifier": " ",
    "VersionID": "a74bb26c-c23f-e711-80da-0050568f4ab2",
    "ProductID": "WRAP ",
    "PieceName": "HOME ACCENTS ",
    "PrintClass": "WRAP ",
    "FirstInhomeDate": "2017-12-12 00:00:00.000",
    "AccountID": "103448",
    "AccountExecutive": "AMANDA COOK (A291)",
    "AccountManager": "OLIVIA DOWD (13406)",
    "ArtManager": "OLIVIA DOWD (13406)",
    "AdUID": "",
    "Status": "",
    "Queue": "",
    "DueDateOverride": "",
    "IsLocked": ""
  },
  {
    "VersionCode": "0ODD6110 ",
    "VersionQualifier": " ",
    "VersionID": "6ad828e1-c23f-e711-80da-0050568f4ab2",
    "ProductID": "WRPBAN-IN ",
    "PieceName": "HOME ACCENTS BANNER ",
    "PrintClass": "WRAP ",
    "FirstInhomeDate": "2017-12-12 00:00:00.000",
    "AccountID": "103448 ",
    "AccountExecutive": "AMANDA COOK (A291)",
    "AccountManager": "OLIVIA DOWD (13406)",
    "ArtManager": "OLIVIA DOWD (13406)",
    "AdUID": "",
    "Status": "",
    "Queue": "",
    "DueDateOverride": "",
    "IsLocked": ""
  }
]
Run Code Online (Sandbox Code Playgroud)

控制器输出:

[{"contentType":null,"serializerSettings":null,"statusCode":null,"value":[{"VersionCode":"0ODD6109 ","VersionQualifier":" ","VersionID":"a74bb26c-c23f-e711-80da-0050568f4ab2","ProductID":"WRAP ","PieceName":"HOME ACCENTS ","PrintClass":"WRAP ","FirstInhomeDate":"2017-12-12 00:00:00.000","AccountID":"103448","AccountExecutive":"AMANDA COOK (A291)","AccountManager":"OLIVIA DOWD (13406)","ArtManager":"OLIVIA DOWD (13406)","AdUID":"","Status":"","Queue":"","DueDateOverride":"","IsLocked":""},{"VersionCode":"0ODD6110 ","VersionQualifier":" ","VersionID":"6ad828e1-c23f-e711-80da-0050568f4ab2","ProductID":"WRPBAN-IN ","PieceName":"HOME ACCENTS BANNER ","PrintClass":"WRAP ","FirstInhomeDate":"2017-12-12 00:00:00.000","AccountID":"103448 ","AccountExecutive":"AMANDA COOK (A291)","AccountManager":"OLIVIA DOWD (13406)","ArtManager":"OLIVIA DOWD (13406)","AdUID":"","Status":"","Queue":"","DueDateOverride":"","IsLocked":""}]}]
Run Code Online (Sandbox Code Playgroud)

我正在寻找的输出(应该与控制台输出相同):

[{"VersionCode":"0ODD6109 ","VersionQualifier":" ","VersionID":"a74bb26c-c23f-e711-80da-0050568f4ab2","ProductID":"WRAP ","PieceName":"HOME ACCENTS ","PrintClass":"WRAP ","FirstInhomeDate":"2017-12-12 00:00:00.000","AccountID":"103448","AccountExecutive":"AMANDA COOK (A291)","AccountManager":"OLIVIA DOWD (13406)","ArtManager":"OLIVIA DOWD (13406)","AdUID":"","Status":"","Queue":"","DueDateOverride":"","IsLocked":""},{"VersionCode":"0ODD6110 ","VersionQualifier":" ","VersionID":"6ad828e1-c23f-e711-80da-0050568f4ab2","ProductID":"WRPBAN-IN ","PieceName":"HOME ACCENTS BANNER ","PrintClass":"WRAP ","FirstInhomeDate":"2017-12-12 00:00:00.000","AccountID":"103448 ","AccountExecutive":"AMANDA COOK (A291)","AccountManager":"OLIVIA DOWD (13406)","ArtManager":"OLIVIA DOWD (13406)","AdUID":"","Status":"","Queue":"","DueDateOverride":"","IsLocked":""}]
Run Code Online (Sandbox Code Playgroud)

我尝试过测试不同的控制器动作类型.结果是我显示的内容或者如果操作结果设置为"对象",我的JSON被包含在[]中而没有"contentType","serializerSettings"等等.

我知道我可以直接在我的动作函数中在React-Redux中打开JSON文本文件,但最终UI将与C#控制器集成,我宁愿调用控制器来实现这一点.

关于我需要改变什么的想法?

SLa*_*aks 6

你需要回来JsonResult,而不是IEnumerable<JsonResult>.

这将告诉MVC将其作为一个处理ActionResult,而不是应该序列化为JSON的任意对象.

或者将其更改为返回object并直接返回对象而不是使用结果.