2015-10-01 188 views
-2

我试图反序列化JSON在我的对象:C#.net反序列化JSON

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

public class FormData 
{ 
    public string audience { get; set; } 
    public Calendar[] calendar { get; set; } 

    public FormData() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 

    public class Calendar 
    { 
     public Quarter quarter { get; set; } 
    } 

    public class Quarter 
    { 
     public int qtrNumber { get; set; } 
     public string qtrString { get; set; } 
     public int[] qtrTools { get; set; } 
     public int qtrYear { get; set; } 
    } 
} 

这里是我的处理程序:

<%@ WebHandler Language="C#" Class="ToolHandler" %> 

using System; 
using System.Web; 
using System.Web.Script.Serialization; 
using System.Text; 
using System.IO; 


public class ToolHandler : IHttpHandler { 

    public void ProcessRequest(HttpContext context) 
    { 
     HttpRequest Request = context.Request; 
     HttpResponse Response = context.Response; 

     JavaScriptSerializer serializer = new JavaScriptSerializer(); 

     Response.ContentType = "text/plain"; 
     try 
     { 
      string strJson = new StreamReader(Request.InputStream).ReadToEnd(); 

      //deserialize the object 
      FormData formData = serializer.Deserialize<FormData>(strJson); 
      if (formData != null) 
      { 
       Response.Write("Success!!"); 
      } 
      else 
      { 
       Response.Write("No Data"); 
      } 
     } 
     catch (Exception ex) 
     { 
      Response.Write("Error :" + ex.Message); 
     } 
    } 
    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 

} 

JSON:

{ 
    "audience": "8", 
    "calendar": [ 
     { 
      "qtrNumber": 1, 
      "qtrYear": 2016, 
      "qtrString": "1st Quarter", 
      "qtrTools": [ 
       "3", 
       "4" 
      ] 
     }, 
     { 
      "qtrNumber": 2, 
      "qtrYear": 2016, 
      "qtrString": "2nd Quarter", 
      "qtrTools": [] 
     }, 
     { 
      "qtrNumber": 3, 
      "qtrYear": 2016, 
      "qtrString": "3rd Quarter", 
      "qtrTools": [] 
     }, 
     { 
      "qtrNumber": 4, 
      "qtrYear": 2016, 
      "qtrString": "4th Quarter", 
      "qtrTools": [] 
     } 
    ] 
} 

后,我看到了什么此行的执行:

FormData formData = serializer.Deserialize<FormData>(strJson); 

formData对象具有4个元素的数组的适当观众和日历,但所有calendar []。quarter对象都为null。请帮助))

+0

看看你的json ...哪里'季:' – ragerory

回答

0

Calendar类在JSON中没有嵌套Quarter属性。你可以“UNNEST”嵌套的属性,一切都应该很好地工作:

public class FormData 
{ 
    public string audience { get; set; } 
    public Calendar[] calendar { get; set; } 

    public FormData() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
    } 

    public class Calendar 
    { 
     public int qtrNumber { get; set; } 
     public string qtrString { get; set; } 
     public int[] qtrTools { get; set; } 
     public int qtrYear { get; set; } 
    } 
} 

例子:https://dotnetfiddle.net/mq1wyP

+0

感谢它现在有道理。我有点新手到C#。 –

0

的“季度”属性都不亮calendar,他们在Quarter。你的JSON必须是:

{ 
    "audience": "8", 
    "calendar": [ {"Quarter" : 
     { 
      "qtrNumber": 1, 
      "qtrYear": 2016, 
      "qtrString": "1st Quarter", 
      "qtrTools": [ 
       "3", 
       "4" 
      ] 
     }}, 
     {"Quarter" : { 
      "qtrNumber": 2, 
      "qtrYear": 2016, 
      "qtrString": "2nd Quarter", 
      "qtrTools": [] 
     }}, 
     etc... 
    ] 
}