c# - 如何防止 C# 在我的测试 Controller 中包装我的 JSON 输出?

标签 c# json asp.net-core-mvc

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

除了 C# 将我的 Controller 输出 JSON 包装在另一组括号中外,它正在工作,这导致在 React 中使用 JSON 时出现问题。

我的测试 Controller :

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

    }
}

控制台输出:

[
  {
    "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": ""
  }
]

Controller 输出:

[{"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":""}]}]

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

[{"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":""}]

我已经尝试测试不同的 Controller 操作类型。结果要么是我显示的结果,要么如果操作结果设置为“对象”,我的 JSON 被包裹在 [] 中,没有“contentType”、“serializerSettings”等参数。

我知道我可以在我的操作函数中直接在 React-Redux 中打开 JSON 文本文件,但最终 UI 将与 C# Controller 集成,我更愿意调用 Controller 来实现这一点。

关于我需要更改的内容有什么想法吗?

最佳答案

您需要返回JsonResult , 不是 IEnumerable<JsonResult> .

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

或者改成返回object并直接返回对象而不是使用结果。

关于c# - 如何防止 C# 在我的测试 Controller 中包装我的 JSON 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194992/

相关文章:

asp.net-core - 有没有办法将 ASP.NET Core 应用程序区域打包为 NuGet 包?

validation - asp.net core 选择数据注释验证不起作用

C# - 套接字未接收所有字节

json - 使用jQuery获取jsonp数据返回无效标签错误

ruby-on-rails - 如何为 Rails 事件记录中的 JSON 列/属性设置默认值?

asp.net-mvc - 使用Razor View 引擎输出Json

c# - 如何使用 C# 从 USB RFID 读取器读取

c# - .NET 框架中的线程生命周期

c# - Windows7 上语音识别 C# WPF 应用程序的两个问题

c# - Asp.net MVC 样板依赖注入(inject)不起作用