2013-11-17 7 views
0

Я отправляю данные от моего клиента методу на моем контроллере WebApi, который принимает класс ResponseFromClient. Как это WebAPI это обрабатывает все преобразования из JSON и изменяет любые имена полей, чтобы соответствовать случаю конвенции различия между Javascript и C#:Как сопоставить имена массива объектов для изменения имен полей?

public class ResponseFromClient 
{ 
    public int QuestionId { get; set; } 
    public ICollection<AnswerDetail> Answers { get; set; } 
    public string Task { get; set; } 
} 
public class AnswerDetail 
{ 
    public int AnswerId { get; set; } 
    public string Text { get; set; } 
    public bool? Correct { get; set; } 
    public bool? Response { get; set; } 
} 

В JavaScript У меня есть массив под названием ans с каждым элементом вида:

qs.ans[index].id = element.answerId; 
qs.ans[index].c = null; 
qs.ans[index].r = false; 
qs.ans[index].text = element.text; 

мне нужно отправить содержимое объекта Javascript responseFromClient к программе # сервера C:

 var responseFromClient = { 
      questionId: qs.q, 
      answers: qs.ans, 
      task: task 
     }; 
     $http({ 
      method: 'POST', 
      url: url, 
      data: responseFromClient 
     }) 

Является ли простой способ установить поле answers в переменной javascript responseFromClient, чтобы он получал массив, содержащий объекты, которые сопоставляются с классом AnswerDetail. Другими словами, мне нужно изменить его так, чтобы ответы и получает массив объектов, которые, как это:

old > new 

id > AnswerID 
c > Correct 
t > Text 
r > Response 

Я думал сделать это, как я, где я переназначить qs.q> QuestionID. Однако ans - массив, поэтому я не уверен, как это сделать.

ответ

2

Не проще многоцелевые отобразить объект на класс в вашем JavaScript

qs.ans[index].answerId = element.answerId; 
qs.ans[index].correct = null; 
qs.ans[index].response = false; 
qs.ans[index].text 

или

в вызове Ajax

data: { "answerId" : responseFromClient.id, 
     "correct": responseFromClient.c, 
     "response": responseFromClient.t, 
     "text": responseFromClient.text } 
0

Вы можете просто переназначить значения, которые вы хотите с массивами старых => новых ключей. Есть более продвинутые способы сделать это, но я не знаю всех деталей вашего дела ...

function remap(obj, old_keys, new_keys){ 
    var len = old_keys.length; 
    var new_obj = {}; 
    for (var i = 0; i < len; i++) { 
     new_obj[new_keys[i]] = obj[old_keys[i]]; 
    } 
    return new_obj; 
} 

var len = ans.length; 
var old_keys = ["id", "c", "r", "text"]; 
var new_keys = ["AnswerId", "Correct", "Response", "Text"] 

for (var i = 0; i < len; i++) { 
    ans[i] = remap(ans[i], old_keys, new_keys); 
} 
Смежные вопросы