Преобразование строки в json, отправка результата в сетку kendo ui
Я хочу создать динамическую сетку, которая автоматически создает столбец динамически. Я использую WebAPi, чтобы вернуть результат
public dynamic SqlDataReaderToExpando(System.Data.Common.DbDataReader reader)
{
var expandoObject = new ExpandoObject() as IDictionary<string, object>;
for (var i = 0; i < reader.FieldCount; i++)
expandoObject.Add(reader.GetName(i), reader[i]);
return expandoObject;
}
public IEnumerable<dynamic> GetDynamicSqlData()
{
using (var cps = new CPS.Entities.CPSContext())
{
using (var cmd = cps.Database.Connection.CreateCommand())
{
cps.Database.Connection.Open();
cmd.CommandText = "dbo.SP_CPSPortalModuleRoles";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
System.Data.SqlClient.SqlParameter param = new System.Data.SqlClient.SqlParameter();
param.Value = Guid.Empty;
param.ParameterName = "ModuleId";
cmd.Parameters.Add(param);
using (var reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess)) //System.Data.CommandBehavior.SequentialAccess
{
while (reader.Read())
{
yield return SqlDataReaderToExpando(reader);
}
}
}
}
}
public HttpResponseMessage GetRoleDetail()
{
HttpResponseMessage response = new HttpResponseMessage();
try
{
RoleItem collSelect = new RoleItem();
IEnumerable<dynamic> collItem = null;
collItem = GetDynamicSqlData().ToList();
collSelect.Item = collItem;
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoJsonConverter() });
string jsonOfTest = javaScriptSerializer.Serialize(collSelect);
response.Content = new ObjectContent<string>(jsonOfTest, new JsonMediaTypeFormatter(), Mime.AppJson);
response.StatusCode = HttpStatusCode.OK;
}
catch (Exception ex)
{
response.StatusCode = HttpStatusCode.ExpectationFailed;
response.Headers.Add(Verb.ExceptionMessage, ex.Message.ToResponseString());
response.Headers.Add(Verb.ExceptionStackTrace, ex.StackTrace.ToResponseString());
}
return response;
}
Здесь я получаю все данные сетки, которые должны отображаться динамически из хранимой процедуры.
Это похоже на прокси-слой, где я получаю данные от службы, как это.
public String GetRoleMappings()
{
RoleItem collection = null;
string data1 = "";
try
{
using (HttpClient httpClient = new HttpClient())
{
Task<HttpResponseMessage> tskResponse = (httpClient.GetAsync(uri + @"/GetRoleDetail/"));
if (!tskResponse.IsFaulted)
{
HttpResponseMessage response = tskResponse.Result;
response.EnsureSuccessStatusCode();
string data = response.Content.ReadAsStringAsync().Result;
data1 = JsonConvert.DeserializeObject<string>(data, ServiceUtility.JsonSettings);
string data2 = JsonConvert.DeserializeObject<string>(data1, ServiceUtility.JsonSettings);
}
}
}
catch (Exception ex)
{
logger.LogError(ex);
}
return data1;
}
Это вернулось к моему клиентскому контроллеру, где я хочу выбросить эти данные в свою сетку пользовательского интерфейса kendo как Json, здесь я получаю как строковые данные, но хочу проанализировать json без сериализации.
public ActionResult GetRoleMapping([DataSourceRequest] DataSourceRequest request)
{
JsonResult jsonResult = null;
string s = objService.GetRoleMappings();
//JsonResult jsonResult = null;
//jsonResult = Json(objModel.Item.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
//var subItems = _subItems.Where(o => o.ItemId == itemId);
//DataSourceResult result = objModel.ToDataSourceResult(request);
//return s;
return Content(s);
//return new stringContent( (s, "application/json");
//return Json(jsonResult);
}
Пожалуйста, помогите мне с предложением. Мне нужно использовать хранимую процедуру. Заранее спасибо,
1 ответ
Вы используете обертки MVC? Если вы используете веб-версию (JS), вы можете попытаться использовать функцию schema.parse для перехвата и анализа этой длинной строки в массиве JSON.