2015-10-01 4 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 элементов, но весь календарь [] .квадратные объекты равны нулю. Пожалуйста, помогите))

+0

Посмотрите на свой JSON ... где 'квартал:' – ragerory

ответ

0

Категория Calendar не имеет вложенных Quarter объектов недвижимости в JSON. Вы можете «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... 
    ] 
} 
Смежные вопросы