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

C# 将keyvalue字符串反序列化为对象,c#,key-value,C#,Key Value,嗨,有人能帮我解决这个问题吗 我有一个HTML页面。此页面包含FirstName、MiddleName、LastName等文本框 在这个HTML页面的按钮clcik上,我调用了一个javascript函数。在这里,我使用JQuery序列化获取所有HTML页面contaols及其值。然后将此值传递给服务器中托管的WCF服务 此服务将此字符串解析为相应的对象,并将值保存到数据库中 因此,在HTMl页面中,我编写了如下Javascript函数: pmamml.ButtonClick = functio

嗨,有人能帮我解决这个问题吗

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

在这个HTML页面的按钮clcik上,我调用了一个javascript函数。在这里,我使用JQuery序列化获取所有HTML页面contaols及其值。然后将此值传递给服务器中托管的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以上任何一种格式

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


我们怎样才能做到这一点。提前感谢。

最简单的方法是使用正则表达式将其拆分为一个数组,匹配\“([^\”]*)


更新如果您要将其发送到web服务,则应将其配置为Json以自动对其进行反序列化

下面的代码会将您的stringdata分成可处理的部分,如下所示

        // 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)); 
//新列表
var l=新列表();
//原始数据
var s=“[{\'name\':\'FirstName\',\'value\':\'Raja\',{\'name\':\'MiddleName\',\'value\':\'Raja\',{\'name\':\'LastName\',\'value\':\'KUMAR\'”;
//清理并分成较大的部分
var d=s.Substring(1,s.Length-2)。替换(“\\”,“”)。替换(“\\”,“”)。替换(“}”,“”)。拆分(“{”);
//拆分最终条目并添加到列表中
var sb=新字符[2]{',',',:'};
foreach(varr in d){l.AddRange(r.Split(sb,StringSplitOptions.removempttyentries));
//名单的内容将是:

名字

名字

价值观

拉贾

名字

中间名

价值观

拉贾

名字

姓氏

价值观

库马尔

//代码还不是很健壮,例如,您需要检查输入字符串是否为空

是的,我找到了解决方案

这是我更新的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字符串,如下所示: {“名字”:“拉贾”,“中间名”:“拉贾”,“姓氏”:“库马尔”}

在我的WCF服务中,将这个JSON字符串转换为对象

[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; }
}
[WebInvoke(Method=“GET”,UriTemplate=“/Update?formData={formData}”,RequestFormat=WebMessageFormat.Json,ResponseFormat=WebMessageFormat.Json)]
公共bool更新(字符串formData)
{
var mlParser=新的mlParser();
System.Web.Script.Serialization.JavaScriptSerializer s=新的System.Web.Script.Serialization.JavaScriptSerializer();
var InfoList=s.Deserialize(formData);
返回mlParser.Update(InfoList);
}
公共类用户
{
公共字符串名{get;set;}
公共字符串MiddleName{get;set;}
公共字符串LastName{get;set;}
}
这很好用


感谢大家的友好响应:)

事实上,我正在尝试获取HTML页面中的所有控件及其值,并将该值传递给WCF服务。该服务将反序列化这些值并保存到数据库。因此,我在HTML页面中编写JQuery,如下所示: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:'entityName=Users&formData='+json.stringify(formData),错误:pmamml.ajaxError,成功:function(msg){document.write(msg);//警报(msg);},}},在我的WCF服务中,我编写了一个方法,该方法接受如下2个参数。你能更新你的问题而不是添加注释吗?要理解你想要实现的目标有点困难。不,这不是最简单的,也不是最聪明的方法。Net有所有用于序列化和反序列化列表和di的对象从JSON到JSON的通讯。(我不会把你-1虽然…@StephaneRolland很好的一点-我忘了你可以自己使用它们。想编辑我的帖子吗?我现在正在iPading,所以这太冒险了。如果你知道其他方法,请更新。