Angular 对象的类型脚本表示法到C#转换
我有我的angular2程序,它可以使http帖子适合其他操作,但这一个让我发疯 以下是typescript DTO: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
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);
}