在客户端使用WebApiContrib ProtoBufFormatter

时间:2013-04-26 19:23:11

标签: asp.net-web-api protobuf-net

我正在使用WebApiContrib.Formatting.ProtoBuf NuGet包(http://nuget.org/packages/WebApiContrib.Formatting.ProtoBuf/0.9.5.0)在我的Web API项目中添加对Protocol Buffers的支持。

服务器端看起来效果很好,但是我无法让Web API客户端库反序列化服务器响应。

System.InvalidOperationException: Type is not expected, and no contract can be inferred: System.Collections.Generic.IEnumerable`1[[WebAPITest1.Protocol.Messages.Product, WebAPITest1.Protocol.Messages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]

这是我的客户代码:

var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(@"http://localhost:60500/");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-protobuf"));
var response = httpClient.GetAsync("/api/products?$orderby=Name").Result;
Assert.IsTrue(response.IsSuccessStatusCode);

var products = response.Content.ReadAsAsync<IEnumerable<Product>>(new[]{new ProtoBufFormatter()}).Result;
Assert.IsTrue(products.Count() > 0);

想法?

1 个答案:

答案 0 :(得分:2)

您是否尝试使用其他而不是IEnumerable<Product>?特别是,可能是拥有一组Product s的顶级对象?例如:

[ProtoContract]
public class NeedsBetterName {
    [ProtoMember(1)]
    public List<Product> Products {get;set;}
}

可能更快乐。实际上,我在本月早些时候(在r629中)为“裸体可枚举”添加了更好的支持 - 但是,我还没有在任何地方部署这个版本。