伙计们,我正在努力完成这项工作,我有一个从android访问的asmx webservice,当我将json字符串发送到webservice时,我调用的SelectToken方法让第一个节点抛出一个NRE,但是当我使用json字符串手动调试VS中的代码时,不会发生此问题。只有从外面打电话才会发生。
[WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public List<ProductDetail> getAllProductsNearMeJson(String ProductRequest)
{
JObject obj = new JObject();
String products = null;
obj = JObject.Parse(ProductRequest);
JToken jtk = null;
jtk = obj.SelectToken("ProductRequest",false);
products = jtk.ToString();
var request = JsonConvert.DeserializeObject<ProductMobileRequest>(products);
//TESTE ONLY
//var request = new ProductMobileRequest();
//request.PRODUCT_LAT = "-30.1135";
//request.PRODUCT_LNG = "-51.2441";
//TESTE ONLY
var lat = request.PRODUCT_LAT;
var lng = request.PRODUCT_LNG;
List<ProductDetail> pdrList = null;
ProductMobileResponse response = new ProductMobileResponse();
try
{
response = _productService.ListMobileNearLocation(request, lat, lng);
if (response.PRODUCTS.Count > 0)
response.STATUS = true;
else
response.STATUS = false;
}
catch (Exception ex)
{
response.STATUS = false;
//response.EXCEPTION_MESSAGE = ex.Message;
}
if (response.STATUS)
{
return response.PRODUCTS;
}
else
{
return pdrList;
}
}
答案 0 :(得分:0)
我通过修改我的方法的签名来修复我的问题,而不是在JObject中选择令牌,因此不需要在JObject中选择令牌,但是如果要通过HTTP传递Json,则需要修改复杂类型。 C#就是这样:
public class myclass
{
[JsonProperty("name")]
public string Name {get;set;]
}
[WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public List<ProductDetail> getAllProductsNearMeJson(MyClass ProductRequest)
{
//do your stuff here and return a List<T>
}
这样.net会在调用方法时将您的json字符串解析为有效的MyClass类型。