2012-11-23 31 views
0

我將JSON對象傳遞迴C#aspx頁面的Web方法。如何正確地構造C#嵌套類以接收復雜的JSON

我的JavaScript看起來像:

return jsonItem = { 
        id: id, 
        title: title, 
        registrationPage: { 
         registration: registration        
        }             
        } 

我通過這個項目到一個aspx Web方法:

$.ajax({ 
      type: "POST", 
      url: "SaveXML.aspx/SaveAs", 
      data: JSON.stringify({ jsonItem : jsonItem }), 
      contentType: "application/json; charset=utf-8",     
      dataType: "json", 
      success: function (msg, textStatus) { 
       alert(textStatus); 
      }, 
    }); 

的JSON有效載荷被髮送精細

在aspx頁面我有類:

public class JSONItem 
{ 
    public string Id { get; set; } 
    public string Title { get; set; } 
    public RegistrationPage RegistrationPage { get; set; }   
} 

public class RegistrationPage 
{ 
    public string Registration { get; set; } 
} 

[WebMethod] 
public static Policy Save(Policy policy) 
{ 
} 

當我嘗試建立這個我得到一個代碼分析錯誤,這是有道理的:

CA1034:Microsoft.Design:不要嵌套類型'SaveXML.RegistrationPage'。或者,更改其可訪問性,以便它不在外部可見。

如果我忽略這個錯誤,代碼就會工作。我曾嘗試更改修飾符,但註冊頁面對象未填充。

如何讓代碼工作並符合上述錯誤?

感謝

+0

奇怪的是,你得到此警告的'RegistrationPage'類,但不是'JSONItem'類。 – Rawling

+0

謝謝,是的。我寧願保持類嵌套。我喜歡這一行的簡單性:data:JSON.stringify({jsonItem:jsonItem}) - 並且不想將多個對象傳入save方法。 – davy

+0

我的答案持續了一段時間,討論的是嵌套的類定義;我以爲你在'JSONItem'('class JSONItem {class RegistrationPage {...} ...}'中定義'RegistrationPage'。有一個嵌套_instance_類應該沒有什麼問題,所以這個警告使我困惑。 – Rawling

回答

0

通過您的WebMethod的定位,它看起來像你嵌套JSONItemRegistrationPagePage類中。確切的說您的代碼如下所示:

public partial class MyPage : System.Web.UI.Page 
{ 
    ... 

    public class JSONItem 
    { 
     public string Id { get; set; } 
     public string Title { get; set; } 
     public RegistrationPage RegistrationPage { get; set; }   
    } 

    public class RegistrationPage 
    { 
     public string Registration { get; set; } 
    } 

    [WebMethod] 
    public static Policy Save(Policy policy) 
    { 
    } 

    ... 
} 

你應該將這些班列Page類的(他們可以留在課程的同一個文件):

public class JSONItem 
{ 
    public string Id { get; set; } 
    public string Title { get; set; } 
    public RegistrationPage RegistrationPage { get; set; }   
} 

public class RegistrationPage 
{ 
    public string Registration { get; set; } 
} 


public partial class MyPage : System.Web.UI.Page 
{ 
    ... 

    [WebMethod] 
    public static Policy Save(Policy policy) 
    { 
    } 

    ... 
} 
+0

謝謝。這是我需要的。無論如何,我將把課程移到一個單獨的文件中。 – davy