将keyvalue字符串反序列化为对象

时间:2012-07-06 07:56:29

标签: c# key-value

任何人都可以帮助我。

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

在这个HTML页面的按钮clcik上,我正在调用一个javascript函数。在这里,我使用JQuery Serialization获取所有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中的任何一种格式。

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

我们怎么做到这一点。提前谢谢。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

下面的代码会将您的字符串数据分成可分割的部分,如下所示。

        // 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)); 

//列表的内容将是

名称

拉​​加

名称

中间名

Raja

名称

名字

KUMAR

//代码不是很健壮,例如你需要检查你的输入字符串是不是空

答案 2 :(得分: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字符串,如下所示: {&#34; FirstName&#34;:&#34; Raja&#34;,&#34; MiddleName&#34;:&#34; Raja&#34;,&#34; LastName&#34;:&#34;库马尔&#34;}

在我的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; }
}

这很好。

为了你的回应,请大家呐喊.. :)