2011-12-07 47 views
1

林在一個循環反序列化JavaScript對象到泛型列表在C#中處理

var licenseList = {}; 

$($licenses).each(function (index) { 

       var license = {}; 
       var editedValues = {}; 

       license.PRODUCT_KEY = $(this).parent('div.licensewrapper').data('productkey'); 

       $(this).find('input:text').each(function (i, val) { 

        if ($(val).attr('data-default-value') != $(val).val() && $(val).val() > 0 && $(val).data('isValid') != false) { 

         var pogKey = $(val).data('product_option_group_key'); 
         var editedValue = $(val).val(); 

         editedValues[pogKey] = editedValue; 

         license.editedValues = editedValues; 

        } 

       }); 

    //licenseList[index] = license; 
    //liceneList.push(license); //if array... 
}); 

我註釋掉我目前的解決方案,創造一些JavaScript項目。但我不認爲在c#中對它們進行反轉化時,這兩者中的任何一個都與通用列表相同。在這種情況下,採取什麼方法可以做到這一點?由於

回答

3

創建陣列

var licenseList = []; 

每個許可證的...

var license = { 
    prop1: 'p1', 
    prop2: 'p2' 
}; 
licenseList.push(license); 

格式和序列發送過JSON數據WEBMETHOD

data = { 
    LicenseList: licenseList 
}; 

$.ajax({ 
     ... 
     data: JSON.stringify(data) 
     ... 
     }); 

在webmethod你的方法參數必須匹配

[WebMethod] 
public static string GetLicenses(List<License> LicenseList) 
{ 
    foreach(var license in LicenseList) 
    { 
    // do whatever 
    } 
} 

示例許可證類。你的物業需要與你的物品相匹配你的javascript

public class License 
{ 
    public string Prop1 {get; set;} 
    public string Prop2 {get; set;} 
} 

希望這會有所幫助。

+0

是啊,我想這是那最好的辦法。順便說一句,屬性不需要匹配,但如果他們這樣做,他們會自動映射到C#對象。 – Johan

+0

是的你是對的,我應該說爲了正確地檢索值。 – zero7

0
function sendToServer(licenseList) 
    { 
    var url = "controller.ashx"; 
    var data = {}; 
    data.SerializedObj = JSON.stringify(licenseList); 
    $.post(url, data, function(response){ 
    if(response.length > 0) 
    { 
     alert(response); 
    } 
    }); 
    } 

    //controller.ashx : 
    public void ProcessRequest (HttpContext context) { 
    //... 
    string serializedObj = context.Request.Form["SerializedObj"] ?? ""; 
    JavaScriptSerializer js = new JavaScriptSerializer(); 
    List<license> collection = js.Deserialize<List<license>>(serializedObj); 

    //... 
    public class license 
    { 
    public string Propertie1 {get;set;} 
    public string Propertie2 {get;set;} 
    } 

Javascript對象必須具有相同的屬性:

var license = {Propertie1 : 'value1', Propertie2 : 'value2'};