这个机会我要感谢所有对这个问题有答案的人,我正在尝试从我的 web api 服务中获取一个 json,但我不能这是我在 web api 上的代码......
[ResponseType(typeof(List<CompanyType>))]
[Route("GetList")]
[DeflateCompression]
public async Task<IHttpActionResult> Get()
{
List<CompanyType> companyTypes = (List<CompanyType>)MemoryCacheManager.GetValue(@"CompanyTypes");
if (companyTypes != null) return Ok(companyTypes);
companyTypes = await _CompanyType.Queryable().ToListAsync();
if (companyTypes == null) return Ok(HttpStatusCode.NoContent);
MemoryCacheManager.Add(@"CompanyTypes", companyTypes);
return Ok(companyTypes);
}
在我的客户网站上,我得到了这个
public async Task<T> GetAsync<T>(string action, string authToken = null)
{
using (var client = new HttpClient())
{
if (!authToken.IsNullOrWhiteSpace())
client.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse(@"Bearer " + authToken);
var result = await client.GetAsync(BuildActionUri(action));
string json = await result.Content.ReadAsStringAsync();
if (result.IsSuccessStatusCode)
return JsonConvert.DeserializeObject<T>(json); //This line fails because the characters in the value
throw new ApiException(result.StatusCode, json);
}
}
正如你所看到的,这里没有什么奇怪的,它是一个简单的代码,它试图将 json 值解析为泛型类,但这失败了,因为当我调用我的 webapi URL 时,它给了我这个值
json = VR LQ R2T Q 2 u B*u000bR "E e ) @q ̔TƑB% ʝ Z>#>#> ̊B J r2 q
我不知道为什么我的 webapi 给我这个值,当我尝试调试我的服务时,它给了我这个值
<ArrayOfCompanyType xmlns:i="http://www.w3.org/2001/XMLSchema-instance" ><CompanyType z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"><Id>1</Id><Type>Privada</Type><JobProviders i:nil="true" /></CompanyType><CompanyType z:Id="i2" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"><Id>2</Id><Type>Mixta</Type><JobProviders i:nil="true" /></CompanyType><CompanyType z:Id="i3" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"><Id>3</Id><Type>Publica</Type><JobProviders i:nil="true" /></CompanyType></ArrayOfCompanyType>
如您所见,一切看起来都很好,但是当我尝试解析以从客户端获取此值时,问题就开始了。
这是我的课
[DataContract(IsReference = true, Name = @"CompanyType", )]
public class CompanyType : Entity
{
[DataMember(Order = 0)]
public int Id { get; set; }
[DataMember(Order = 1)]
public string Type { get; set; }
[DataMember(Order = 2)]
public virtual List<JobProvider> JobProviders { get; set; }
}
我在没有的情况下尝试了它 de 数据合同 仍然出现相同的错误。
此致敬意!。
好吧,我想通了,我正在尝试使用此示例 http://blog.developers.ba/asp-net-web-api-gzip-compression-actionfilter/但问题是序列化程序未注册,所以在我的启动项目中我做了这个
GlobalConfiguration.Configuration.Formatters.Add(new ProtoBufFormatter());
我更改了我的操作,删除了属性 [放气压缩]
[ResponseType(typeof(List<CompanyType>))]
[Route("GetList")]
//[DeflateCompression]
public async Task<IHttpActionResult> Get()
{
Logic goes here....
}
它现在正在工作,但现在我有另一个问题,当我尝试调用我的 webapi 操作时,我必须响应 IHttpActionResult 有一个例外
没有为类型定义序列化程序:系统对象