or
var obj = {};obj.ID = 1;obj.Name = "Joe";var DTO = { 'DTO': obj };$.ajax({ type: "POST", contentType: 'application/json;charset=utf-8', url: "/Controller/Method", dataType: "json", data: JSON.stringify(DTO), success: function (data) { // do stuff }, complete: function () { // do stuff }});public JsonResult Method(SomeClass DTO){ // do stuff}$("#contractUpload").kendoUpload({ multiple: false, showFileList: false, localization: { select: GetUploadSelectText(), dropFilesHere: "Drop File Here" }, async: { saveUrl: '/Contract/UploadFile', autoUpload: true }, select: function (e) { // check file types }, upload: function (e) { // get values from page into a DTO var SaveContract = {}; SaveContract.bdID = $("#hidBDID").val(); SaveContract.DocumentType = $("#hidContractType").val(); //billing terms var billingTermsViewModel = {}; billingTermsViewModel.ContractID = window.billingTermsModel.ContractID; //save deleted rows var removedBillingTerms = []; $.each(window.removedBillingTerms.data(), function (index, value) { var removedBillingTermsItem = {}; removedBillingTermsItem = value.ID; removedBillingTerms.push(removedBillingTermsItem); }); billingTermsViewModel.RemovedBillingTerms = removedBillingTerms; //look through any rows that have been updated and send the updates to the view model var directBillingTerms = []; $.each(window.dataSourceDirectBillingTerms.data(), function (index, value) { if (value.dirty == true || value.ID == 0) { var directBillingTermsItem = {}; var stipulatedTermItem = {}; directBillingTermsItem.ID = value.ID; directBillingTerms.push(directBillingTermsItem); value.dirty = false; } }); var indirectBillingTerms = []; $.each(window.dataSourceIndirectBillingTerms.data(), function (index, value) { if (value.dirty == true || value.ID == 0) { var indirectBillingTermsItem = {}; var stipulatedTermItem = {}; indirectBillingTermsItem.ID = value.ID; indirectBillingTerms.push(indirectBillingTermsItem); value.dirty = false; } }); billingTermsViewModel.RemovedBillingTerms = removedBillingTerms; billingTermsViewModel.DirectBillingTerms = directBillingTerms; billingTermsViewModel.IndirectBillingTerms = indirectBillingTerms; SaveContract.BillingTermsViewModel = billingTermsViewModel; var DTO = { 'DTO': SaveContract }; e.data = { doc: e.files[0].rawFile, DTO: JSON.stringify(DTO) }; }, success: function(data) { //do stuff }, error: function (e) { //do stuff }});[HttpPost]public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> files, HttpPostedFileBase doc, SaveContract DTO) { // when i get here, DTO is null}