Angular 对象的类型脚本表示法到C#转换

Angular 对象的类型脚本表示法到C#转换,angular,typescript2.0,Angular,Typescript2.0,我有我的angular2程序,它可以使http帖子适合其他操作,但这一个让我发疯 以下是typescript DTO: export class NutritionixSearchRequest { appId: string; appKey: string; query: string; fields: string[]; sort: {}; filters: {}; } 当我填充并序列化它时,会得到一个类似于以下内容的字符串: {"appId":"a

我有我的angular2程序,它可以使http帖子适合其他操作,但这一个让我发疯

以下是typescript DTO:

export class NutritionixSearchRequest
{
  appId: string;
  appKey: string;
  query: string;
  fields: string[];
  sort: {};
  filters: {};
}
当我填充并序列化它时,会得到一个类似于以下内容的字符串:

        {"appId":"app_id","appKey":"app_key","query":"taco bell",
"fields":"item_name","brand_name","nf_calories","nf_serving_size_qty","nf_serving_size_unit"],
    "sort":{"field":"_score","order":"desc"},"filters":{"item_type":2}}
如果我将此字符串作为post请求的主体提供给fiddler,并直接发送到该公司的api,它就可以工作。如果我将请求发送到我的api,然后调用该公司的api,则dto不同

我尝试了两个版本的api DTO(如下所示),但都没有成功。第一个返回排序/过滤器设置为null的and对象。第二个返回带有“{{”的项,如图所示。

这个版本根本不起作用,我正在调用该公司的api。下面是webapi 2中的序列化对象:

    {"appId":"app_id","appKey":"app_key","query":"taco bell",
"fields":"item_name","brand_name","nf_calories","nf_serving_size_qty","nf_serving_size_unit"],
"sort":[[[]],[[]]],"filters":[[[]]]}
这是dto的:

 public class NutritionixSearchRequestDto
 {
    public string appId { get; set; }
    public string appKey { get; set; }
    public string query { get; set; }
    public ICollection<string> fields { get; set; }
    public ICollection<object> sort { get; set; }
    public ICollection<object> filters { get; set; }
 }

public class NutritionixSearchRequestDto
    {
        public string appId { get; set; }
        public string appKey { get; set; }
        public string query { get; set; }
        public ICollection<string> fields { get; set; }
        public object sort { get; set; }
        public object filters { get; set; }
    }
public class nutritionxsearchrequestdto
{
公共字符串appId{get;set;}
公共字符串appKey{get;set;}
公共字符串查询{get;set;}
公共ICollection字段{get;set;}
公共ICollection排序{get;set;}
公共ICollection筛选器{get;set;}
}
公共级营养学搜索要求
{
公共字符串appId{get;set;}
公共字符串appKey{get;set;}
公共字符串查询{get;set;}
公共ICollection字段{get;set;}
公共对象排序{get;set;}
公共对象筛选器{get;set;}
}
以下是webapi方法:

[Route("nxqlSearch")]
[HttpPost]
public async Task<IHttpActionResult> nxqlSearch([FromBody] NutritionixSearchRequestDto nsrd)
{
   JavaScriptSerializer oJS = new JavaScriptSerializer();
   NutritionixSearchDto nsr = new NutritionixSearchDto();

   using (var client = new HttpClient())
   {
      var searchQuery = oJS.Serialize(nsrd);
      searchQuery.Replace("app_id", appId).Replace("app_key", appKey);
      client.BaseAddress = new Uri(baseUri + "/search");
      client.DefaultRequestHeaders.Accept.Clear();
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

      HttpResponseMessage response = await client.PostAsJsonAsync(new Uri(baseUri + "/search"), searchQuery);
      if (response.IsSuccessStatusCode)
      {
         var results = await response.Content.ReadAsAsync<object>();
         nsr = oJS.Deserialize<NutritionixSearchDto>(results.ToString());
      }
   }

   return Ok(nsr);
}
[路由(“nxqlSearch”)]
[HttpPost]
公共异步任务nxqlSearch([FromBody]NutritionXSearchRequestDTO nsrd)
{
JavaScriptSerializer oJS=新的JavaScriptSerializer();
NutritionXsearchdto nsr=新的NutritionXsearchdto();
使用(var client=new HttpClient())
{
var searchQuery=oJS.Serialize(nsrd);
searchQuery.Replace(“app\u id”,appId)。Replace(“app\u key”,appKey);
client.BaseAddress=新Uri(baseUri+“/search”);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessage response=wait client.postsjsonasync(新Uri(baseUri+“/search”)、searchQuery;
if(响应。IsSuccessStatusCode)
{
var results=await response.Content.ReadAsAsync();
nsr=oJS.Deserialize(results.ToString());
}
}
返回正常(nsr);
}