2016-08-23 13 views
0

私はASP.NETアプリケーションでAJAXを通じてJSONオブジェクトを投稿しています。サーバ側でJavaScript DeserializeがJSONオブジェクトを逆シリアル化できませんでした

{ 
    "SaveData" : "{ 
     "TransactionType":"2", 
     "Date":"8/10/2016", 
     "BankAccountID":"449", 
     "PaidTo":"Cash", 
     "Amount" :"1551", 
     "CheckNumber":"51451", 
     "SupportingDocNo":"51521", 
     "Remarks":"This is a remarks & this contains special character", 
     "CheckPaymentID":0 
    }", 
    "Type" : "Save" 
} 

(私はハンドラを使用しています)私は、アプリケーション/ JSON としてContentTypeを設定し、備考に予期せず終了します。この私のSaveDataをオブジェクトの文字列にすることで

context.Request.ContentType = "application/json"; 
var data = new JavaScriptSerializer() 
      .Deserialize<CheckPaymentsService>(context.Request["SaveData"]); 

としてSaveDataをオブジェクトをデシリアライズしていますそれは&記号を含んでいます。

<などの特殊文字や特殊文字はどうすればよいですか?

+1

あなたが投稿した「JSON」は、有効なJSONで始まっていない可能性があります。 –

+0

JSONを修正しても同じエラーが発生しました –

+0

修正したJSONを表示してください。理想的には[mcve]を入力してください。明示的にデシリアライズしているときに、文字列と非直列化呼び出しを含むコンソールアプリケーションを作成できるはずです。 –

答えて

0

です。次のコードは私のためにうまく動作します。

using System; 
using System.Web.Script.Serialization; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     private const string Json = @"{ 
     ""SaveData"": { 
     ""TransactionType"": ""2"", 
     ""Date"": ""8/10/2016"", 
     ""BankAccountID"": ""449"", 
     ""PaidTo"": ""Cash"", 
     ""Amount"": ""1551"", 
     ""CheckNumber"": ""51451"", 
     ""SupportingDocNo"": ""51521"", 
     ""Remarks"": ""This is a remarks & this contains special character"", 
     ""CheckPaymentID"": 0 
    }, 
    ""Type"": ""Save""}"; 

     static void Main(string[] args) 
     { 
      try 
      { 
       var data = new JavaScriptSerializer().Deserialize<CheckPaymentsService>(Json); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e); 
      } 
     } 
    } 

    public class CheckPaymentsService 
    { 
     public SaveData SaveData { get; set; } 
     public string Type { get; set; } 
    } 

    public class SaveData 
    {   
     public int TransactionType { get; set; } 
     public DateTime Date { get; set; } 
     public int BankAccountID { get; set; } 
     public string PaidTo { get; set; } 
     public int Amount { get; set; } 
     public int CheckNumber { get; set; } 
     public int SupportingDocNo { get; set; } 
     public string Remarks { get; set; } 
     public int CheckPaymentID { get; set; } 
    } 
} 
0

提供されたjsonは無効です。

はここで正しいバージョンである(あなたはhttp://jsonlint.com/でそれを確認することができます):JSONで

{ 
    "SaveData": { 
     "TransactionType": "2", 
     "Date": "8/10/2016", 
     "BankAccountID": "449", 
     "PaidTo": "Cash", 
     "Amount": "1551", 
     "CheckNumber": "51451", 
     "SupportingDocNo": "51521", 
     "Remarks": "This is a remarks & this contains special character", 
     "CheckPaymentID": 0 
    }, 
    "Type": "Save" 
} 

しかも違法文字は、私はあなたがあなたのJSONをエスケープする必要があると思う

‘ single quote 
” quote 
\ backslash 
+0

JSON形式を修正しても同じエラーが発生する @Quentin Roger –

関連する問題