繁体   English   中英

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

[英]How to properly structure C# nested classes to receive complex JSON

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

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

如果我忽略该错误,则代码可以正常工作。 我确实尝试过更改修饰符,但是没有填充Registration Page对象。

如何使代码正常工作并遵守上述错误?

谢谢

通过对WebMethod进行本地化,您似乎在Page类中嵌套了JSONItemRegistrationPage 确切地说,您的代码如下所示:

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

    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM