1

嗨,任何人都可以帮助我解决这个问题。

我有一个 HTML 页面。此页面包含 FirstName、MiddleName、LastName 等的文本框。

在这个 HTML 页面的按钮 clcik 上,我正在调用一个 javascript 函数。在这里,我使用 JQuery 序列化获取所有 HTML 页面内容及其值。然后将此值传递给我在服务器中托管的 WCF 服务。

该服务会将这个字符串解析为相应的对象并将值保存到数据库中。

所以在 HTMl 页面中,我编写了如下的 Javascript 函数:

pmamml.ButtonClick = function() {
var formData = $("#form1").serializeArray();
var stringJson;
$.getJSON('ajax/test.json', function(formData) {
   stringJson=  JSON.stringify(formData)
});
//alert(stringJson);
$.ajax({
    type: 'GET',
    url: 'http://URL/Service.svc/Update?formData=' + JSON.stringify(formData),
    error: pmamml.ajaxError,
    success: function(msg) {
        document.write(msg);
        //alert(msg);
    },
});},

在 WCF 服务中,我写道:

[WebInvoke(Method = "GET", UriTemplate = "/Update?formData={formData}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    public string Update(string formData)
    {
        //   Here i am receiving formdata string as
        // formData = "[{\"name\":\"FirstName\",\"value\":\"Pankaj\"},{\"name\":\"MiddleName\",\"value\":\" \"},{\"name\":\"LastName\",\"value\":\"KUMAR\"}]";
    }

我想将此字符串反序列化为 List 对象或 keyvaluepair 或 Dictionary 上述任何一种格式。

这样我就可以将此值保存到数据库中。

我们应该怎么做。提前致谢。

4

3 回答 3

0

The code below will give you your stringdata seperated into workeable pieces, as displayed below.

        // new list 
        var l = new List<string>();
        // original data
        var s = "[{\"name\":\"FirstName\",\"value\":\"Raja\"},{\"name\":\"MiddleName\",\"value\":\"Raja \"},{\"name\":\"LastName\",\"value\":\"KUMAR\"}]";
        // clean up and split in larger parts
        var d = s.Substring(1, s.Length - 2).Replace("\\", "").Replace("\"", "").Replace("}", "").Split('{');
        // Split in final entries and add to list
        var sb = new char[2] { ',', ':' };
        foreach (var r in d) { l.AddRange(r.Split(sb, StringSplitOptions.RemoveEmptyEntries)); 

// Contents of the List will be

name

FirstName

value

Raja

name

MiddleName

value

Raja

name

LastName

value

KUMAR

// The code is not very robust yet, e.g. you need to check your inputstring is not empty

于 2012-07-06T08:50:16.637 回答
0

最简单的方法是使用 RegEx 将其拆分为一个数组,匹配 \"([^\"]*)。

更新鉴于您将其发送到 Web 服务,它应该只配置为 Json 以自动反序列化它

于 2012-07-06T08:19:31.430 回答
0

是的,我得到了解决方案

这是我更新的 JQuery

pmamml.ButtonClick = function() {
$.fn.serializeObject = function() {
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};
var stringJson = JSON.stringify($('#form1').serializeObject());
var Userdata = "formData=" + stringJson;
$.ajax({
    type: 'GET',
    url: 'http://URL/Service.svc/Update?' + Userdata,
    error: pmamml.ajaxError,
    success: function(response, status, xhr) {
        if (response = true) {
            //alert(response);
            alert("Data Updated Successfully");
        }
    }
});

}

在上述方法中,formData 将传递如下 JSON 字符串:{ "FirstName":"Raja","MiddleName":"Raja","LastName":"Kumar"}。

在我的 WCF 服务中,将此 JSON 字符串转换为 Object。

[WebInvoke(Method = "GET", UriTemplate = "/Update?formData={formData}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    public bool Update(string formData)
    {
        var mlParser = new MLParser();
        System.Web.Script.Serialization.JavaScriptSerializer s = new System.Web.Script.Serialization.JavaScriptSerializer();

            var InfoList = s.Deserialize<Users>(formData);

        return mlParser.Update(InfoList);
    }



public class Users
{
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
}

这工作正常。

谢谢大家的友好回应.. :)

于 2012-07-06T13:37:13.513 回答