将Web服务迁移到.NET Core 2.0并返回json - c#

我已经将Web服务迁移到.NET Core 2.0,它可以正常工作,但是在以json字符串获取响应时遇到问题。

api上的方法:

    [HttpGet]
    [ProducesResponseType(typeof(string), 200)]
    [ProducesResponseType(typeof(EntityNotFoundErrorResult), 404)]
    public async Task<IActionResult> GetCurrenciesAsync()
    {
        var result = await service.GetByTypeAsync(ObjectType.Currency.ToString());

        return Ok(result);
    }

返回正确的json作为result

"{\"elements\": [{\"Id\": \"1\", \"Symbol\": \"PLN\"},{\"Id\": \"2\", \"Symbol\": \"SIT\"}]}"

然后在客户端上,我使用service stack将货币作为字符串获取:

    public virtual IEnumerable<CurrencyData> GetCurrencies()
    {
        string response = null;

        try
        {
            response = api.Get<string>("/Currencies");
        }
        catch (Exception e)
        {
        }

        return string.IsNullOrEmpty(response) ? null :  JsonConvert.DeserializeObject<TempCurrencyClass>(response).elements;
    }

response看起来像这样:

"\"{\\\"elements\\\": [{\\\"Id\\\": \\\"1\\\", \\\"Symbol\\\": \\\"PLN\\\"},{\\\"Id\\\": \\\"2\\\", \\\"Symbol\\\": \\\"SIT\\\"}]}\""

所以JsonConvert.DeserializeObject抛出反序列化异常:

Newtonsoft.Json.JsonSerializationException

但是当我反序列化对刺痛和目标的回应时,它起作用:

var x = JsonConvert.DeserializeObject<string>(response);
var deserialized = JsonConvert.DeserializeObject<TempCurrencyClass>(x).elements;

我猜问题出在客户身上吗?奇怪的是,它在.NET Core 1.1上可以正常工作

我缺少什么?

参考方案

好吧,.NET Core 2.0中的[Produces("application/json")]似乎已更改,并且正在将字符串输出序列化为json,所以我对其进行了序列化两次...解决此操作系统的方法,用[Produces("application/json")]替换[Produces("text/plain")],从而覆盖方法/控制器

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

.NET Core 2从内存流下载Excel文件 - c#

我当时在.NET Core项目中工作,当时我应该从记录创建电子表格文件并下载它而不将其保存在服务器中。搜索上述标题并没有多大帮助,但给出了一些指示。另外,ASP.NET中使用的大多数方法在.NET Core中均不起作用。因此,我最终可以想出一个效果很好的解决方案。我将在下面的答案中与那些愿意像我一样进行搜索的人分享。 参考方案 首先,您需要安装EPPlus.…

将字符串数组发布到.net-core mvc - c#

问题:我正在尝试通过jquery post发送一个字符串数组,但是它们没有被正确解析,我得到的只是列表中的null。javascript:var array = []; array.push("test") array.push("test2") array.push("tes3") $.post(…

使用.NET Core 2.2发送电子邮件 - c#

在MVC ASP.NET中,您可以像这样在web.config文件中设置smtp配置:<system.net> <mailSettings> <smtp from="MyEmailAddress" deliveryMethod="Network"> <network host=…

ASP.NET Core-在Singleton注入上存储库依赖项注入失败 - c#

我正在使用SoapCore为我的ASP.NET Core MVC应用程序创建Web服务。我正在使用Entity Framework Core和简单的存储库模式来获取我的数据库数据。我通过Startup.cs中的.AddSingleton()注入存储库类:services.AddSingleton<IImportRepository, ImportRep…