2016-10-21 9 views
0

JSON形式のfortune cookieテキストを返すasp.netにwebserviceを実装しました。サービスは動作しており、私はWebサービスの出力を消費することができます。しかし、出力が期待されていないよう...asp.net webserviceのJSON出力を読む

Websevice JSON出力は:お察しの通り

{"d": "{\"CookieText\":\"All you have to know is - what the hell is d ???\"}"} 

、 - 私は「CookieText」の値を探している - しかし、私は方法を知っているドントそれを得るために。コード(結果= Websevice JSON出力)と

{"CookieText":"All you have to know is - what the hell is d ???."} 

::次の出力を得ることができる - 私

jsonObject = new JSONObject(result); 
result_intern = jsonObject.getString("d"); 

しかし、実際にどのような - 私を探していることはCookieTextだけの値であり、 。私は成功しなかった次の行を試しました(result_internは空です)。

jsonObject = new JSONObject(result); 
result_intern = jsonObject.getJSONObject("d").getString("CookieText"); 

私には2つの質問があります。

1)なぜ、変数にパックされたWebサービスの出力(何ですか?)d?私を教えてください、dの目的は何ですか?それは42のようなものですか?私は1000年代の嫌いなメールを開発者に送る前にそれを理解したいと思っています。

public class CFortuneCookieText 
{ 
    private string m_CookieText = ""; 

    public string CookieText 
    { 
     get { return m_CookieText; } 
     set { m_CookieText = value; } 
    } 
} 

Webサービスメソッド:

[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
    public string GetFortuneCookieSayingsJSON() 
    { 
     CFortuneCookieText tmpObj = new CFortuneCookieText(); 
     tmpObj.CookieText   = "All you have to know is - what the hell is d ???"; 

     return JsonConvert.SerializeObject(tmpObj, Formatting.None); 
    } 

2)私はCookieTextの値だけを取得するにはどうすればよい私はDにそれを置くために誰にも言わなかった...直列化されたクラスにはdがありませんJSONObject.getStringを使用していますか?事前

答えて

3

ありがとうございます、Webサービスは、要求者にデータを送信するためにdを使用する理由は、あなたの最初の質問hereへの答えを見つけることができます。あなたの2番目の質問について

、あなたが直接私の第二の部分について

result_intern = jsonObject.getString("CookieText"); 
+0

+1のdの魔法の拡張へのリンク!2番目の答えによると:私はJSONObjectクラスを使用してアンドロイドアプリでwebserviceの出力を消費し、CookieTextの値を取得する方法がわかりません。 – GinSonic

+0

@GinSonicあなたは 'asp.net'というタグを付けました。その中でそれをする。更新された回答を確認します。 – Imad

+0

申し訳ありませんが、私はアンドロイドを言及しませんでした。私はそれがJSONObjectクラスでJSONデータを取得するのが好きだと書いて以来、それが有益な情報だとは思っていませんでした... Anayway、私はOPにAndroidを追加しました。 getString( "CookieText")の直接呼び出しは機能しません。 org.json.JSONExceptionが発生します。CookieText例外の値はありません。 – GinSonic

0

として応答にgetStringを呼び出すことができますAndroid用

string result_intern = JsonConvert.DeserializeObject<CFortuneCookieText>(result).CookieText; 

として非常に有名Json.netを使用して、値を取得することができますqusetion私はすでにすべてのものを実行するために受け入れがたい時間を投資したので、私は非常に満足している次の回避策を見つけました... ASP.NET Webサービスのストライドを解析する必要がある場合

あなたが必要とするすべてのCookieTextの値であり、allmighty「D」を取り除く
{"d": "{\"CookieText\":\"All you have to know is - what the hell is d ???\"}"} 

:この小さな安っぽい回避策は、それをしない:

try 
    { 
     JSONObject jsonObject = new JSONObject(JSON_String); 
     tmp_result    = jsonObject.getString("d"); 
     JSONObject tmpJSONObj = new JSONObject(tmp_result); 
     result     = tmpJSONObj.getString("CookieText"); 

    } 
    catch (JSONException e) 
    { 
     e.printStackTrace(); 
    } 

がなければならないようにAndroidの内ngのより良い解決策が、私は少なくともこれを見つけてうれしいです;) "d"の魔法で私を助けてくれてありがとう。