2012-01-13 13 views
11

私はJSON.NETを使用してオブジェクトを除外しますが、使用しているオブジェクトの現在の構造を使用することはできません。JSON.NETを使用して匿名オブジェクトにJSONを逆シリアル化します。

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 
} 
] 

エラーを取得イムになります。私は必要なもの

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

contxtを取得するコードをいくつか追加できますか?呼び出しコードと結果の使用方法 – Mharlin

+0

@Mharlin更新 – Johan

答えて

16
  • 1.

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

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

      } 
     }); 

コードに{items: [{..}]}のようなinputFields文字列があり、[{..}, {..}]のようなものではない場合は、この手順をスキップします。重要なことは、このフォーマット[{..}, {..}]

  • 2.

の文字列inputFieldsを取得することです。

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

解決策のように見えますが、現在はテストできません。 didntは '新しい[]'部分について知っていました。助けてくれてありがとう! – Johan

+0

は私のために働く。それが役に立てば幸い。 – zdrsh

関連する問題