Javascript 如何通过json对象数组为嵌套对象赋值

Javascript 如何通过json对象数组为嵌套对象赋值,javascript,jquery,json,asp.net-mvc,nested,Javascript,Jquery,Json,Asp.net Mvc,Nested,这是我的模型课: public class SearchForFlight { public SearchForFlight() { Segments = new otherType(); } public int AdultCount { get; set; } public JourneyType JourneyType { get; set; } public string Sources { get; set; }

这是我的模型课:

public class SearchForFlight
{
    public SearchForFlight()
    {
        Segments = new otherType();
    }
    public int AdultCount { get; set; }
    public JourneyType JourneyType { get; set; }
    public string Sources { get; set; }

    public otherType Segments { get; set; }
}
public class otherType
{
    public string Origin { get; set; }
    public string Destination { get; set; }
    public FlightCabinClass FlightCabinClass { get; set;}
    public DateTime PreferredDepartureTime { get; set;
    public DateTime PreferredArrivalTime { get; set; }
}
现在,我的要求是将对象和嵌套对象一起发布到外部api。 所需的表单如下所示:

{
   AdultCount: $("#AdultCount").val(),
   JourneyType: $("#JourneyType :selected").text(),
   PreferredAirlines: null,
   Segments: [
              {
               Origin: $("#Origin").val(),
               Destination: $("#Destination").val(),
               FlightCabinClass: $("#FlightCabinClass").val(),
               PreferredDepartureTime:$("#PreferredDepartureTime").val(),
               PreferredArrivalTime: $("#PreferredArrivalTime").val(),
              }
             ]
        }
 @Html.TextBoxFor(model => model.Segments.Origin)
因此,我创建了另一个类OtherType并将所有嵌套对象放入其中。 我从这个问题中得到了这个想法 现在,这是我的脚本标签,里面有所有的代码来发布简单对象和嵌套对象。但是嵌套对象的值是空的。 我应该如何在这里对代码建模

  <script>
                $(document).ready(function () {                 
                    $("#btnPost").click(function () {
                        var sof = {
                            AdultCount: $("#AdultCount").val(),
                            JourneyType: $("#JourneyType :selected").text(),
                            PreferredAirlines: null,
                                Segments: [
                                {
                                    Origin: $("#Origin").val(),
                                    Destination: $("#Destination").val(),
                                    FlightCabinClass: $("#FlightCabinClass").val(),
                                    PreferredDepartureTime: $("#PreferredDepartureTime").val(),
                                    PreferredArrivalTime: $("#PreferredArrivalTime").val(),
                                }
                            ],
                        };

                        $.ajax(
                            {
                                url: "/api/Flight/SearchFlight",
                                type: "Post",
                                data: sof,
                                success: function (data) {
                                    alert(data);
                                }
                            });        
                    });
                });
        </script>

请给出任何提示。

删除段的数组[]。在$.ajax func中使用contentType和stringify。将生成的id用于原点。它可能不是“起源”。所以,请相应地更改它

 <script>
            $(document).ready(function () {                 
                $("#btnPost").click(function () {
                    var sof = {
                        AdultCount: $("#AdultCount").val(),
                        JourneyType: $("#JourneyType :selected").text(),
                        PreferredAirlines: null,
                        Segments: {
                                Origin: $("#Origin").val(),
                                Destination: $("#Destination").val(),
                                FlightCabinClass: $("#FlightCabinClass").val(),
                                PreferredDepartureTime: $("#PreferredDepartureTime").val(),
                                PreferredArrivalTime: $("#PreferredArrivalTime").val(),
                            },
                    };

                    $.ajax(
                        {
                            url: "/api/Flight/SearchFlight",
                            type: "Post",
                            contentType: 'application/json',
                            data: JSON.stringify(sof),
                            success: function (data) {
                                alert(data);
                            }
                        });        
                });
            });
    </script>

$(文档).ready(函数(){
$(“#btnPost”)。单击(函数(){
变量sof={
成人计数:$(“#成人计数”).val(),
JourneyType:$(“#JourneyType:选定”).text(),
首选航空公司:空,
部分:{
原产地:$(“#原产地”).val(),
目的地:$(“#目的地”).val(),
FlightCabinClass:$(“#FlightCabinClass”).val(),
PreferredDepartTime:$(“#PreferredDepartTime”).val(),
PreferredArrivalTime:$(“#PreferredArrivalTime”).val(),
},
};
$.ajax(
{
url:“/api/Flight/SearchFlight”,
类型:“Post”,
contentType:'应用程序/json',
数据:JSON.stringify(sof),
成功:功能(数据){
警报(数据);
}
});        
});
});

你的FlightCabinClass模型是什么?
Segments
是一个对象,而不是集合,因此你无法创建数组。只需使用
数据:$('form.Serialize(),
来序列化所有表单控件的所有值,或者如果您确实想手动编写所有这些,那么使用
Segments.Origin=$(“#Segments_Origin”).val(),
等(请注意,您的元素将具有
id=“Segments_Origin”
,而不是
id=“Origin”
)是的,我已经更改了这些id值,但我必须将所有这些值发布到特定的air门户rest api,因此我试图按照api文档中给出的方式发布数据,否则它会使用
$('form')回复错误的请求@StephenMueckeusing
将正确序列化所有表单控件,前提是您生成了正确的视图。为了方便起见,api最终返回了200个状态代码。我刚刚严格要求以文档中提到的格式提供rest api数据,但是ur Suggestion在@Karthik M RIf工作。如果您使用嵌套对象,最好的做法是使用JSON.stringify函数并提及application/json。如果不使用json.stringify,jquery的默认行为是将数据作为application/x-www-form-urlencoded发送