2012-01-13 27 views
11

JSON.NET kullanarak bir nesneyi deserlaize ediyorum, ancak kullandığım nesnenin mevcut yapısıyla çalışmasını sağlayamıyorum.JSON anonim nesneyi JSON.NET ile deserialize edin

bu

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

Im hata alıyorum (i nesnelerin listesini geçmek istiyorum) Benim nesne halen Liks görünüyor

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

:

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

Ne ihtiyacım benzer bir şeydir Örnek 2, bir liste içeren bir kapsayıcı nesne. Herhangi bir yardım takdir edilir. Teşekkür

C# kodu:

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

Bir metin almak için daha fazla kod ekleyebilir misiniz? Arama kodu ve daha sonra – Mharlin

+0

@Mharlin kullanımının kullanımı güncellendi – Johan

cevap

16
  • 1.

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

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

      } 
     }); 

Bu adımı atlayın, kodunuzda, {items: [{..}]} gibi inputFields dizesini alırsınız ve [{..}, {..}] gibi değil, test amacıyla ekledim. Önemli olan bu biçimde [{..}, {..}]

  • 2.

bir dize Inputfields elde etmektir.

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

Bir çözüm gibi görünüyor, ama şimdi test edemiyorum. Yeni [] bölümü hakkında bilmiyordum. Yardım için teşekkürler! – Johan

+0

benim için çalışıyor. Umarım yardımcı olur. – zdrsh

İlgili konular