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