2011-08-11 84 views
0

這樣送我發送的json數據如何從客戶端

這樣,我構建了一個類似於下面一個


function Post(carousel, first, last, per_page, page) { 
    var json = "{'Name':'" + $("input[id*='txtName']").val() + 
      "','Subject':'" + $("input[id*='txtSubject']").val() + 
      "','Email':'" + $("input[id*='txtEmail']").val() + 
      "','Message':'" + jQuery.trim($('.message').val()) + "'}"; 



    $.ajax({ 
     type: "POST", 
     url: "Feedback.aspx/SaveData", 
     data: json , 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      'here is my success code' 
     } 
    }); 
} 

所以我的JSON數據後反序列化在服務器端JSON數據我只想知道如何用c#編寫服務器端的代碼,這會將我的json數據反序列化爲反饋類。

我的反饋類具有相同的屬性,如名稱,主題,電子郵件,消息等,所以告訴我如何用反序列化來填充反饋類。

請幫我用代碼。感謝

回答

4

你實際上不需要做任何事情。 ASP.NET將爲你做到這一點。只要使用適當的參數定義方法,它會自動地工作:

[WebMethod] 
public static void SaveData(string Name, string Subject, string Email, string Message) 
{ 
    // Do something 
} 

或者因爲你已經有這個類中定義的,你只需要環繞對象的JavaScript的領域:

var json = "{'msg':{'Name':'" + $("input[id*='txtName']").val() + 
      "','Subject':'" + $("input[id*='txtSubject']").val() + 
      "','Email':'" + $("input[id*='txtEmail']").val() + 
      "','Message':'" + jQuery.trim($('.message').val()) + "'}}"; 

[WebMethod] 
public static void SaveData(Feedback msg) 
{ 
    // Do something 
} 
+0

+1是的,joe在你的情況下是絕對正確的,即使你已經創建了對象也不需要反序列化,我現在已經爲json編輯了它,而不是先前爲webmethod參數的msg – abhijit

+0

@abhi:其實,我擁有的方式是正確的。如果您傳入包含這四個字段的對象,則您的方法將具有相同的4個參數。如果您傳入的JSON對象包含一個字段,而該字段又有四個自己的字段,則該字段的名稱將與C#中的參數名稱(msg)匹配,並且JSON對象的字段名稱將匹配'Feedback'類的屬性名稱。 'json'變量名不會被髮送到C#代碼中。 –

+1

@ user728750:讓生活變得更輕鬆的一件事就是使用JSON2.js庫。它會讓你獲取一個JSON對象並將其轉換爲一個字符串,所以你不必擔心那個部分 - 你可以使用一個普通的JSON對象,調用JSON.stringify(someobj)',它會給你一個可以在AJAX調用中使用的字符串。 –

2

看看下面的庫:

Json.NET

可以deserialise的JSON像這樣:

string json = "{\"Name\":\"name\",\"Subject\":\"subject\",\"Email\":\"email\",\"Message\":\"message\"}"; 
FeedBack feedBack = Newtonsoft.Json.JsonConvert.DeserializeObject<FeedBack>(json); 

....

public class FeedBack 
{ 
    public string Name { get; set; } 
    public string Subject { get; set; } 
    public string Email { get; set; } 
    public string Message { get; set; } 
} 

或者你可以使用內置的.NET Framework JSON序列化程序類:

JavaScriptSerializer Class

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
FeedBack feedBack = serializer.Deserialize<FeedBack>(json); 
+0

這裏你展示了一個不同的JSON格式,所以我認爲我的JSON數據將工作或不? var json =「{'Name':'」+ $(「input [id * ='txtName']」)。val()+ 「','Subject':'」+ $(「input [id * = 'txtSubject']「)。val()+ 」','Email':'「+ $(」input [id * ='txtEmail']「).val()+ 」','Message' 「+ jQuery.trim($('。message')。val())+」'}「; 你顯示爲字符串json =「{\」Name \「:\」name \「,\」Subject \「:\」subject \「,\」Email \「:\」email \「,\」Message \ :\「信息\」}」; 所以請告訴我,我需要根據你的風格,如\「電子郵件\」,建立JSON數據.......請指導。謝謝 – Mou

+0

斜槓只是用來避免字符串中的雙引號。我已經使用單引號檢查了相同的代碼,如「{'Name':'name',.....}」,它工作正常。不過,有效的JSON應該使用雙引號。請參閱:[保持您的JSON有效](http:// simonwillison。net/2006/oct/11/json /) – jdavies

1

試試這個: using System.Web.Script.Serialization;

feedback fb = new feedback(); 

fb = JSONSerializer.ConvertFromJSON<feedback>(json); 

class JSONSerializer 
{ 
    public static string GetJSONString(object data) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     return serializer.Serialize(data); 
    } 
    public static T ConvertFromJSON<T>(String json) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     return serializer.Deserialize<T>(json); 
    } 
}