我的问题是:
这是从我的WebAPI控制器发回的响应.
"[
[
{\"id\":\"identifier\"},
{\"name\":\"foobar\"}
]
]"
Run Code Online (Sandbox Code Playgroud)
请注意,响应包含在引号中,并且所有嵌入的引用都被转义.这显然是个问题.我可以为JSON.NET Serializer提供任何设置以防止这种情况发生吗?
正如pswg在他的回答中猜到的那样,我正在使用JSON.NET
JsonConvert.SerializeObject(instance)
Run Code Online (Sandbox Code Playgroud)
执行我的序列化.
我这样做是因为当我构建我的自定义转换器时,我将它们包含在我的WepApiConfig中的JsonConvert.DefaultSettings中(我显然认为这不是问题)
我之前尝试将我的HttpGets的返回类型交换为"我的对象类型",响应是我对象的ToString()方法的json表示...这让我知道序列化没有通过我的转换器.
将我的HttpGets的返回类型从字符串更改为"我的对象类型"并将这些转换器直接插入到WebAPi的默认HttpConfiguration中就可以了.
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new FooConverter());
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new BarConverter());
Run Code Online (Sandbox Code Playgroud)
十分简单.
我的ASP.NET Core API生成一个SAS要上传到Azure Blob存储的文件.看起来字符串被用双引号括起来,这就是我用来上传文件的前端解决方案的问题.
我怎样才能返回一个字符串,但要确保它不是用双引号括起来的?
这是API控制器:
public async Task<IActionResult> GetSAS(string blobUri, string _method)
{
if (string.IsNullOrEmpty(blobUri) || string.IsNullOrEmpty(_method))
return new StatusCodeResult(400);
// Get SAS
var sas = _fileServices.GetSAS(blobUri, _method);
return Ok(sas);
}
Run Code Online (Sandbox Code Playgroud) 很长一段时间,这里有第一次海报.我几天来一直在努力解决这个问题,并希望得到任何提示.我在下面分解了这个问题.
我想要实现的目标:
我想建立一个JSON WCF Web服务,但我想使用JSON.net序列化程序而不是WCF附带的序列化程序.为什么?因为我发现使用WCF附带的序列化会增加集合(我将在下面展示一个我的意思的例子).该服务的最终消费者将成为一个JavaScript客户端,因此我不希望客户端做更多的麻烦来浏览JSON.
我想出了一个我想要的简单示例,并着手尝试使其在C#中运行.我必须承认在很长一段时间内没有使用.NET,这可能导致我的缓慢.无论如何,我对它有耐心等待.
所以,我想要一个接受用户名的服务,并返回一个带有用户信息的JSON对象.我设想这样的服务被称为:
http://someHostName/whoareyou?username=paul
Run Code Online (Sandbox Code Playgroud)
并让服务回应:
{
"errorCode": 0,
"payLoad" : {
"userFullName": "Paul The Octopus",
"userLevel" : "Administrator"
}
}
Run Code Online (Sandbox Code Playgroud)
我可以轻松地在JavaScript或PHP中使用上述响应的JSON对象,并且对自己感觉非常好.
经过一些谷歌搜索后,我发现了一些帖子,暗示这对于.NET Framework 4中的WCF很容易.我刚刚在一个课程上做了一些摆弄WCF,但很久就忘记了99%,所以我找到并关注这篇文章适应我的目标:http: //www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide#
尝试1:
按照上面的帖子,我能够设置一个WCF服务(下面列出的代码),它做了我想要的但是生成的JSON输出有点臃肿,如下所示.
RestServiceImpl.svc.cs文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using Newtonsoft.Json;
using System.Collections.Specialized;
//Based on this psot: http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide
namespace RestService
{
public class RestServiceImpl : IRestServiceImpl
{
#region IRestService Members
public WhoAreYouResponse whoareyou(string username)
{
var payLoad = new Dictionary<string, string>
{
{"userFullName", …Run Code Online (Sandbox Code Playgroud)