Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止C#在我的测试控制器中包装我的JSON输出?_C#_Json_Asp.net Core Mvc - Fatal编程技术网

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

如何防止C#在我的测试控制器中包装我的JSON输出?,c#,json,asp.net-core-mvc,C#,Json,Asp.net Core Mvc,Visual Studio和C#的新功能。我正在为.Net Core/MVC React Redux应用程序开发UI(其他人正在开发模型和控制器),作为开发的一部分,我想连接一个测试控制器以输出一些JSON,我正在从文本文件中读取这些JSON 它工作正常,只是C#将我的控制器输出JSON包装在另一组括号中,这导致在React中使用JSON时出现问题 我的测试控制器: using System; using System.Collections.Generic; using System.Linq

Visual Studio和C#的新功能。我正在为.Net Core/MVC React Redux应用程序开发UI(其他人正在开发模型和控制器),作为开发的一部分,我想连接一个测试控制器以输出一些JSON,我正在从文本文件中读取这些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);
        }

    }
}
控制器输出:

[{"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":""}]}]
我正在寻找的输出(应该与控制台输出相同):

我试过测试不同的控制器动作类型。结果就是我所显示的,或者如果操作结果设置为“Object”,那么我的JSON被包装在[]中,没有“contentType”、“serializerSettings”等参数

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


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

您需要返回
JsonResult
,而不是
IEnumerable

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


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

不要自己序列化它。当我尝试将所有的行返回都包括在内并且引号都转义为:[{\r\n\“VersionCode\”:\“0ODD6109\”时,只需将对象传递到
Json(…)
,\r\n您的调试器Vizalizer正在这样做。输出很好。谢谢!这很有效。我想我试过了,但没有意识到我还必须将return语句更改为“return Json(dataObj)”;“yield”导致了与JsonResult类型的冲突。
[{"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":""}]