如何正确构造C#嵌套类以接收复杂的JSON

时间:2012-11-23 10:22:17

标签: c# json class

我将JSON对象传递回C#aspx页面web方法。

我的JavaScript看起来像:

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

我将此项目传递给aspx网络方法:

$.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”。或者,更改其可访问性,使其不在外部可见。

如果我忽略错误,代码确实有效。我确实尝试更改修改器,但未填充注册页面对象。

如何让代码工作并遵守上述错误?

由于

1 个答案:

答案 0 :(得分:0)

通过WebMethod的本地化,您似乎已在JSONItem类中嵌套了RegistrationPagePage。确切地说,您的代码如下所示:

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)
    {
    }

    ...
}