php webservice json,jQuery 结合 Json 提交数据到Webservice,并接收从Webservice返回的Json数据...

服务器端

[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)] // UseHttpGet = false

public List GetProductPropertyList(string classCode, string city) // Post 方式,参数对应JSON字段属性,并自动赋值直接使用

{

return PropertyManager.GetPropertySet(classCode, "zh-CN").DataList;

}注意:GET方法与POST方法不同,有参数的时候,如果参数的值不是ASCII字符(比如中文),GET的参数要encodeURI编码,要不服务端接收到的数据为乱码。

复杂的Json数据提交

简单的Json 格式的数据如 { name:Yangjun, age:27 }

复杂的Json格式的数据,其实只是Json嵌套,比如: {name:yangjun, age:27, child:[{name:yangke, age:1},{name:yangbin, age:2}]}

如果是这种复杂的Json格式的数据要提交,并在Webservices中获取,然后根据这个Json格式的字符串,序列成.net对象,应该怎么做呢?

比如我要提交下面的数据:

客户端:

var productPropertyTemplate = {"ProductId":10024, "PropertyList":[

{"PropertyId":18, "PropertyType":"text", "PropertyValue":"号码是100"},

{"PropertyId":19, "PropertyType":"checkbox", "PropertyValue":"57|28"}]}

$.ajax({

type: "GET",

contentType: "application/json; charset=utf-8",

url: "/WebServices/ProductPropertyWebService.asmx/PostProductPropertyList",

anysc: false,

data: { propertyList: productPropertyTemplate },

dataType: "json",

success: function (result) { alert(result.d) },

error: function (XMLHttpRequest, textStatus, errorThrown) {

alert(errorThrown + ':' + textStatus);

}

});服务器端:

1、要反序列化Json字符为.net对象,有比较多的开源类库,我使用的是.net 3.5版本以上自带的DataContractJsonSerializer,写一个辅助类:

///

/// Json序列化和反序列化的帮助方法

///

public class JsonHelper

{

///

/// JSON序列化:把对象序列化成Json格式的字符串

///

public static string JsonSerializer(T t)

{

var ser = new DataContractJsonSerializer(typeof(T));

var ms = new MemoryStream();

ser.WriteObject(ms, t);

string jsonString = Encoding.UTF8.GetString(ms.ToArray());

ms.Close();

return jsonString;

}

///

/// JSON反序列化:根据Json格式的字符串,反序列化成对象

///

public static T JsonDeserialize(string jsonString)

{

var ser = new DataContractJsonSerializer(typeof(T));

var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));

var obj = (T)ser.ReadObject(ms);

return obj;

}

}2、因为要反序列化成相应的对象,所以先构造两个对象类,注意每个类和类的字段前面的特性修改符:

[DataContract]

public class MProductProperty

{

[DataMember(Order = 0, IsRequired = true)]

public int ProductId { set; get; }

[DataMember(Order = 1, IsRequired = true)]

public List PropertyList { set; get; }

}

public class MProperty

{

[DataMember(Order = 0, IsRequired = true)]

public int PropertyId { set; get; }

[DataMember(Order = 1, IsRequired = true)]

public string PropertyType { set; get; }

[DataMember(Order = 2, IsRequired = true)]

public string PropertyValue { set; get; }

}3、接收并处理Json数据的Web方法:

[WebMethod]

[ScriptMethod(UseHttpGet = true)]

public string PostProductPropertyList()

{

string jsonString = HttpContext.Current.Request["propertyList"];

var productProperty = JsonHelper.JsonDeserialize(jsonString); // productProperty 成功反序列化成MProductProperty的对象

//返回接收成功标识

return "postsuccess";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值