2012-01-13 3 views
11

Im, использующий JSON.NET, делает deserlaize объект, но я не могу заставить его работать с текущей структурой объекта, использующего im.Deserialize JSON для анонимного объекта с использованием JSON.NET

http://dorobantu.me/post/2010/08/22/Deserializing-JSON-to-anonymous-types-in-C.aspx

Мой объект в настоящее время выглядит Liks это (я хочу, чтобы передать список объектов)

[ 
{ 
    "ID": "Concurrent User", 
    "FieldType": 190, 
    "value": "" 
}, 
{ 
    "ID": "System Type", 
    "FieldType": 191, 
    "value": null 
} 
] 

Im получаю ошибку:

Cannot deserialize JSON array into type '<>f__AnonymousType1`3[System.String,System.String,System.String]'. 

Что мне нужно что-то подобное к примеру # 2, контейнерный объект, содержащий список. Любая помощь приветствуется. Благодаря

C# код:

public void GetPoints() 
    { 
     string inputFields = HttpContext.Current.Request["inputFields"]; 

     // var test = new { ID = string.Empty, FieldType = string.Empty, Description = string.Empty }; 

     var example = new { containerArray = new { ID = string.Empty, FieldType = string.Empty, Description = string.Empty } }; 

     var fields = JsonConvert.DeserializeAnonymousType(inputFields, example); 
    } 

JavaScript:

$('.quoteonly :input').live('change keyup', function() { 

     var $container = $('#quoteonly-container'); 
     var containerObject = {}; 

     var containerArray = []; 

     $container.find('.quoteonly :input').each(function() { 

      var fieldType = $(this).data('fieldtype'); 
      var id = $(this).data('id'); 

      var currentObject = { 'ID': id, 'FieldType': fieldType }; 

      switch (fieldType) { 

       case 190: //textbox 
        currentObject.value = $(this).val(); 
        break; 
       case 191: //select 
        currentObject.value = $(this).val(); 
        break; 
       case 192: //radio 
        currentObject.value = $(this).prop('checked') == true ? 1 : 0; 
        break; 
       case 193: //checkbox 
        currentObject.value = $(this).prop('checked') == true ? 1 : 0; 
        break; 
      } 

      containerArray.push(currentObject); 
      containerObject.containerArray = containerArray; 
     }); 

     $.ajax({ 
      url: '../SentinelOperationsUI/GenericHandler.ashx', 
      data: { 'FunctionName': 'GetPoints', 'inputFields': JSON.stringify(containerObject) }, 
      success: function (data) { 

      } 
     }); 

    }); 
+0

Возможно, вы добавите еще какой-нибудь код для получения контекста? Вызывающий код, а затем использование результата – Mharlin

+0

@Mharlin обновленный – Johan

ответ

16
  • 1.

var DTO = { 'items': JSON.stringify(containerObject) };

$.ajax({ 
      url: '../SentinelOperationsUI/GenericHandler.ashx', 
      data: JSON.stringify(DTO), 
      success: function (data) { 

      } 
     }); 

пропустите этот шаг, если в вашем коде вы получите строку вводаFields, как {items: [{..}]}, а не как [{..}, {..}] Я просто добавил ее для тестирования. Важно, чтобы получить строку inputFields в этом формате [{..}, {..}]

  • 2.

.

public void GetPoints() 
     { 
      string inputFields = HttpContext.Current.Request["items"]; 
      var test = new[] { new { ID = 0, FieldType = string.Empty, Description = string.Empty } }; 
      var fields = JsonConvert.DeserializeAnonymousType(inputFields, test); 
     } 
+0

Похож на решение, но не могу его проверить. Не знал о 'новой []' части. Спасибо за помощь! – Johan

+0

работает для меня. Надеюсь, поможет. – zdrsh