2016-03-16 8 views
0

Люди, мне нелегко сделать эту работу, у меня есть asmx webservice, к которому обращаются из android, и когда я отправляю json-строку в веб-сервис, метод SelectToken, который я вызываю, чтобы получить первый узел бросает NRE, но эта проблема не возникает, когда я отлаживаю код из VS, используя строку json вручную. Это происходит только тогда, когда его вызывают извне.JObject Select Token Null Reference Exception C#

[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

Я думаю, что все дело в следующем: каково значение параметра ProductRequest? –

+0

{"ProductRequest": "{\" PRODUCT_BATHS \ ": \" \ ", \" PRODUCT_GARAGE \ ": \" \ ", \" PAGE_SIZE \ ": \" 20 \ ", \" PRODUCT_ROOMS \ ": \" \ "\ "SEARCH_TYPE \": \ "\", \ "PRODUCT_MIN_VAL \": \ "\", \ "PAGE_INDEX \": \ "1 \", \ "PRODUCT_SELLER \": \ "\", \" PRODUCT_FURNITURE \ ": \" \ "\ "продукта PRODUCT_TYPE \": \ "\", \ "PRODUCT_LNG \": \ "- 51,2434 \", \ "PRODUCT_LAT \": \ "- 30,1133 \", \" PRODUCT_MAX_VAL \ ": \" \ ", \" PRODUCT_CITY \ ": \" \ "}"} –

+0

Можете ли вы опубликовать эту строку json внутри своего вопроса? Трудно скопировать его из комментария, потому что есть некоторые специальные символы, и неясно, исходят ли они из SO или из вашей исходной строки – Edin

ответ

0

Я установил свой вопрос путем изменения подписи моего метода, чтобы взять сложный объект вместо этого, так что нет необходимости выбирать маркеры в JObject, однако, если вы передаете JSON над HTTP вам нужно украсить сложный тип в 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, когда вызывается метод.

Смежные вопросы