如何映射对象数组的名称以更改字段名称?

时间:2013-11-17 11:38:24

标签: javascript

我将数据从我的客户端发送到我的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是一个数组,所以我不知道该怎么做。

2 个答案:

答案 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);
}