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/