2011-08-11 88 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); 
    } 
}