2012-01-13 18 views
11

Im usando JSON.NET do deserlaize un objeto, pero no puedo conseguir que funcione con la estructura actual del objeto que estoy usando.Deserializar JSON a un objeto anónimo utilizando JSON.NET

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

Mi objeto actualmente se ve Liks esto (quiero pasar una lista de objetos)

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

Im que consigue el error:

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

Lo que necesito es algo similar al ejemplo n. ° 2, un objeto contenedor que contiene una lista. Cualquier ayuda es apreciada. Gracias

código 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

¿Puede agregar un poco más de código para obtener un contxto? El código de llamada y luego el uso del resultado – Mharlin

+0

@Mharlin actualizado – Johan

Respuesta

16
  • 1.

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

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

      } 
     }); 

omita este paso si en su código, obtiene la cadena inputFields como {items: [{..}]} y no como [{..}, {..}]. Lo acabo de agregar para fines de prueba mu. Lo importante es conseguir un InputFields cadena en este formato [{..}, {..}]

  • 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

Parece una solución, pero ahora no puedo probarlo. No sabía sobre la parte 'nueva []'. ¡Gracias por ayudar! – Johan

+0

funciona para mí. Espero eso ayude. – zdrsh

Cuestiones relacionadas