这个机会我要感谢所有回答这个问题的人,我正试图从我的web api服务中获取一个json,我不能这是我在web api的代码... < / p>
[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值解析为Generic类,但这失败了因为当我调用我的webapi Url它给了我这个值
json = VR LQ R2T Q 2u B*R “E e ) @q ̔Ԣb% Ҝ Z &gt;# &gt; ;#&GT;̊BJr2q
我不知道为什么我的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 DataContracts的情况下尝试了它,但仍然是同样的错误。
最好的问候!答案 0 :(得分:0)
我想通了,我试图使用这个示例http://blog.developers.ba/asp-net-web-api-gzip-compression-actionfilter/,但问题是序列化程序没有注册,所以在我的启动项目中我做了这个
GlobalConfiguration.Configuration.Formatters.Add(new ProtoBufFormatter());
我更改了删除属性[DeflateCompression]
的操作[ResponseType(typeof(List<CompanyType>))]
[Route("GetList")]
//[DeflateCompression]
public async Task<IHttpActionResult> Get()
{
Logic goes here....
}
现在它正在运行,但是现在我有另一个问题,当我尝试调用我的webapi动作时,我必须响应IHttpActionResult,有一个例外
没有为类型定义序列化程序:System.Object