Я успешно создал простые объекты следующим образом.Как создать сложные объекты .net из json (javascript) в Asp.Net WebApi с помощью RequestCommand
json на стороне клиента js выглядит следующим образом.
{"Page":1, "Take":10, "SortOrder":"Asc", "PropName":"Id"}
На стороне WebAPI, у меня есть следующий класс
public class PaginatedRequestCommand
{
public int Page { get; set; }
public int Take { get; set; }
public string PropName { get; set; }
public string SortOrder { get; set; }
}
А класс WebApiConfig выглядит следующим образом
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// skiped many other lines as they are not relevant
config.ParameterBindingRules.Insert(0, typeof(PaginatedRequestCommand),
x => x.BindWithAttribute(new FromUriAttribute()));
}
}
и поэтому в контроллере Wep Api я следующий метод действия ,
[HttpPost]
[HttpGet]
public PaginatedList<PatientCategory> PatCat(PaginatedRequestCommand cmd)
{
//......
}
Так вот у меня есть объект PaginatedRequestCommand правильно построен и свойство страница, Take и т.д., правильно доступно. Angaljs ajax-звонок в браузере
$http({
method: 'GET',
url: this.callParams.uri, // The URI
params: this.callParams.paginationOptions, // This is where the JSON that showed earlier goes.
headers: { 'Content-Type': 'application/Json' }
})
Все, что до сих пор так хорошо.
Теперь я хочу передать еще несколько параметров. Я хочу включить массив в JSON следующим образом.
{"Page":1,"Take":10,"SortOrder":"Asc","PropName":"Id",
"wherePredicateParams":
[{"propName":"Name","val":"s"},
{"propName":"Description","val":"h"}
]
}
Итак, вы видите, что «wherePredicateParams» является дополнительным объектом, который я хочу передать. Его массив. Какие изменения мне нужно сделать на стороне WebApi?
Я попытался добавить еще одно свойство в классеPaginatedRequestCommand, публичная строка [] wherePredicateParams {получить; задавать; } , поэтому полный класс выглядит следующим образом.
public class PaginatedRequestCommand
{
public int Page { get; set; }
public int Take { get; set; }
public string PropName { get; set; }
public string SortOrder { get; set; }
public string[] wherePredicateParams { get; set; }
}
Это на самом деле работает, в том смысле, что свойство wherePredicateParams из PaginatedRequestCommand объекта, созданного с помощью API внутри метода действия вышеупомянутого контроллера предоставляет мне {"propName":"Name","val":"s"}
и {"propName":"Description","val":"h"}
. Но проблема в том, что я должен разбирать это сам и использовать. Есть ли способ лучше.
Затем я попытался изменить строку [] для whereParam [] и определили класс
public class whereParam
{
public string propName { get; set; }
public string val { get; set; }
}
Так вы видите PROPNAME и Вэл равны нулю? Что мне не хватает?