2015-10-01 40 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... 
    ] 
}