我将数据从我的客户端发送到我的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
})
是否有一种简单的方法可以在javascript变量answers
中设置responseFromClient
字段,以便它接收包含映射到AnswerDetail
类的对象的数组。换句话说,我需要更改它,以便得到答案和类似的对象数组:
old > new
id > AnswerID
c > Correct
t > Text
r > Response
我想要像我在重新映射qs.q&gt;的地方那样做。 questionId。但是ans是一个数组,所以我不知道该怎么做。
答案 0 :(得分: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 }
答案 1 :(得分:0)
您只需使用old =&gt;数组重新映射所需的值即可新钥匙。有更多高级方法可以做到这一点,但我不知道你案件的所有细节......
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);
}