2015-08-02 2 views
2

У меня есть строка Json, которую я создал в jquery. Теперь я должен опубликовать его на стороне сервера. Я не могу создать его эквивалентный класс в C#.C# эквивалентный класс для строки Json

Это моя JSON Строка

[ 
    { 
     "Option": "Sub Option 0", 
     "Value": "Question 0", 
     "questions": [ 
      { 
       "Option": "Sub Option 1", 
       "Value": "Sub Question for 0", 
       "questions": [ 
        { 
         "Option": "Sub Option 2", 
         "Value": "Sub Question for 1" 
        }, 
        { 
         "Option": "Sub Option 5", 
         "Value": "Sub Question for 1", 
         "questions": [ 
          { 
           "Option": "Sub Option 6", 
           "Value": "Sub Question for 5", 
           "questions": [ 
            { 
             "Option": "Sub Option 7", 
             "Value": "Sub Question for 6" 
            } 
           ] 
          } 
         ] 
        } 
       ] 
      }, 
      { 
       "Option": "Sub Option 3", 
       "Value": "Sub Question for 0" 
      }, 
      { 
       "Option": "Sub Option 4", 
       "Value": "Sub Question for 0" 
      } 
     ] 
    } 
] 

Я попытался, как это.

public class AnyName 
{ 
    public string Option { get; set; } 
    public string Value { get; set; } 
    public List<AnyName> questions { get; set; } 
} 

Мой метод действия, который будет принимать данные

[HttpPost] 
public void GetQuestion(AnyName allQuestions) 
{ 
    //read all the question here. 
    var x = 10; 
} 

Js:

var myJson = CreateJsonData(childrenQuestions); 
      $.ajax({ 
       type: 'POST', 
       contentType: 'application/json; charset=utf-8', 
       url: '/Home/GetQuestion', 
       dataType: "json", 
       data: JSON.stringify(myJson), 
       success: function (result) { 

       } 
      }); 

Я получаю нуль на стороне сервера. allQuestions is null

+0

json2csharp.com –

+0

@AmitKumarGhosh Также объясните, как он ответит на вопрос OP – EZI

+0

Вопросы на третьем уровне отсутствуют в json, может быть причиной вашей проблемы. – Janty

ответ

0

Исправьте оболочку свойства вопросов, поскольку она опускается ниже в строке JSON. В зависимости от используемого сериализатора JSON вы также можете попытаться сопоставить его с помощью атрибута, который может быть специфичным для сериализатора, но совпадение свойства класса с ожидаемым именем свойства в JSON является немного более глупым доказательством.

public class Question 
{ 
    public string Option { get; set; } 
    public string Value { get; set; } 
    public List<Question> questions { get; set; } 
} 

Список будет генерировать массив JSON класса Вопрос и десериализации правильно из массива JSON, содержащих структуры, которые соответствуют классу вопрос.

Поскольку структура JSON имеет корень массива JSON вопросов, необходимо также внести эти изменения, чтобы принять массив:

[HttpPost] 
public void GetQuestion(List<Question> questions) 
{ 
    //read all the question here. 
    var x = 10; 
} 

и отбросить Root класс. Вам это не нужно, основываясь на структуре JSON.

+0

Я изменил его. Но все равно я получаю нуль на стороне сервера. См. Отредактированный вопрос. –

+0

Кроме того, вопросы «вопросы» ниже обведены в строке JSON, поэтому сделайте то же самое в классе –

+0

@AmitKumar Еще одно обновление. Подпись действия должна быть изменена. –

3

Вы можете использовать любое имя

public class AnyName 
{ 
    public string Option { get; set; } 
    public string Value { get; set; } 
    public List<AnyName> Questions { get; set; } 
} 

Так ваш тип десериализовать будет List<AnyName>, для ex,

var list = JsonConvert.DeserializeObject<List<AnyName>>(json); 
+0

Я получаю null на стороне сервера. –

+0

@AmitKumar См. Мой обновленный ответ. У вас проблема с оболочкой с свойством вопросов. –

+0

@AmitKumar Без вашего кода на стороне сервера трудно сказать что-либо. Параметр WebMethod должен быть «List » – EZI

Смежные вопросы