从AJAX发送KeyValuePair到Wcf服务

时间:2014-04-06 05:25:55

标签: javascript ajax html5 wcf keyvaluepair

我使用AJAX & WCF我想发送一个 KeyValuePair 数组:

服务中的数组(在特定类中):

[DataMember]
public KeyValuePair<string, CustomDay>[] WorkDays { get; set; }

CustomDay.cs:

[DataContract]
public class CustomDay
{
    [DataMember]
    public CustomTime Start { get; set; }
    [DataMember]
    public CustomTime End { get; set; }
}

CustomTime.cs:

[DataContract]
public class CustomTime
{
    [DataMember]
    public int Hour { get; set; }
    [DataMember]
    public int Minute { get; set; }
}

我通过以下函数在JavaScript中创建数组:

function CreateWorkDaysDictonary() {

    var workdaysdic = new Object();

    if ($('#checkbox-sunday').is(':checked')) {
        var starttime = { Hour: $('#select-from-hour-sunday').val(),
            Minute: $('#select-from-minute-sunday').val()
        };
        var endtime = { Hour: $('#select-until-hour-sunday').val(),
            Minute: $('#select-until-minute-sunday').val()
        };
        workdaysdic["Sunday"] = { Start: starttime, End: endtime };
    }

    if ($('#checkbox-monday').is(':checked')) {
        var starttime = { Hour: $('#select-from-hour-monday').val(),
            Minute: $('#select-from-minute-monday').val()
        };
        var endtime = { Hour: $('#select-until-hour-monday').val(),
            Minute: $('#select-until-minute-monday').val()
        };
        workdaysdic["Monday"] = { Start: starttime, End: endtime };
    }

    //and so on...

    return workdaysdic;
}

JS中创建的数组:

enter image description here

但是WCF数组到达没有数据

enter image description here

我不明白为什么会这样,我会很高兴有人可以帮助我。

我将对象作为JSON发送给WCF:

enter image description here

当我尝试创建对象时,请说:

function CreateWorkDaysDictonary() {

    var workdaysdic = new Array();

    if ($('#checkbox-sunday').is(':checked')) {
    var starttime = { Hour: $('#select-from-hour-sunday').val(),
        Minute: $('#select-from-minute-sunday').val()
    };
    var endtime = { Hour: $('#select-until-hour-sunday').val(),
        Minute: $('#select-until-minute-sunday').val()
    };
    workdaysdic[workdaysdic.length] = { "Sunday": { Start: starttime, End: endtime}};
}

if ($('#checkbox-monday').is(':checked')) {
    var starttime = { Hour: $('#select-from-hour-monday').val(),
        Minute: $('#select-from-minute-monday').val()
    };
    var endtime = { Hour: $('#select-until-hour-monday').val(),
        Minute: $('#select-until-minute-monday').val()
    };
    workdaysdic[workdaysdic.length] = { "Monday": { Start: starttime, End: endtime} };
}

        //and so on...

        return workdaysdic;
    }

我收到错误:the server responded with a status of 400 (Bad Request)

1 个答案:

答案 0 :(得分:1)

最后,我设法通过以下方式解决问题:

我创建了一个对象列表(WCF)而不是数组:

[DataMember]
public List<DataItem> WorkDays { get; set; }

DataItem.cs:

[DataContract]
public class DataItem
{
    [DataMember]
    public string Key;

    [DataMember]
    public CustomDay Value;
}

我发送了这样的列表(JS):

function CreateWorkDaysDictonary() {

    var workdaysdic = new Array();

    if ($('#checkbox-sunday').is(':checked')) {
        var starttime = { Hour: $('#select-from-hour-sunday').val(),
            Minute: $('#select-from-minute-sunday').val()
        };
        var endtime = { Hour: $('#select-until-hour-sunday').val(),
            Minute: $('#select-until-minute-sunday').val()
        };
        workdaysdic.push({ Key: "Sunday", Value: { Start: starttime, End: endtime} });
    }

    if ($('#checkbox-monday').is(':checked')) {
        var starttime = { Hour: $('#select-from-hour-monday').val(),
            Minute: $('#select-from-minute-monday').val()
        };
        var endtime = { Hour: $('#select-until-hour-monday').val(),
            Minute: $('#select-until-minute-monday').val()
        };
        workdaysdic.push({ Key: "Monday", Value: { Start: starttime, End: endtime} });
    }

    //and so on...

    return workdaysdic;
}

它有效! :)

我将在这里提到它可以使用字典而我没有使用它,因为我必须对xml文件进行序列化。