2017-12-09 4 views
0

PipedriveとDynamics CRMを統合したいと思います。 Pipedriveで取引が更新されるたびにwebhookに電話しています。私はJObject形式でデータを取得しています。私はそれから2つのフィールドを抽出したい。一つはステータス、もう一つはタイトルです。どうすればいいですか?JObjectから値を取得する方法

コードは、ウェブフックを呼び出すには:

[RoutePrefix("api/webhook")] 
public class WebhookController : ApiController 
{ 
    [HttpPost] 
    [Route("")] 
    public void Post(JObject message) 
    { 
     Console.WriteLine($"Received webhook: {message}");    
    } 
} 

JSONを私は取得していますどの:

{ 
    "v":1, 
    "matches_filters":{ 
    "current":[ 

    ] 
    }, 
    "meta":{ 
    "v":1, 
    "action":"updated", 
    "object":"deal", 
    "id":1, 
    "company_id":2278508, 
    "user_id":3371496, 
    "host":"agniket.pipedrive.com", 
    "timestamp":1512620040, 
    "timestamp_micro":1512620040475200, 
    "permitted_user_ids":[ 
     3371496 
    ], 
    "trans_pending":false, 
    "is_bulk_update":false, 
    "pipedrive_service_name":false, 
    "matches_filters":{ 
     "current":[ 

     ] 
    }, 
    "webhook_id":"31814" 
    }, 
    "current":{ 
    "id":1, 
    "public_id":null, 
    "creator_user_id":3371496, 
    "user_id":3371496, 
    "person_id":1, 
    "org_id":null, 
    "stage_id":1, 
    "title":"vaishali deal", 
    "value":0, 
    "currency":"INR", 
    "add_time":"2017-12-04 04:44:15", 
    "update_time":"2017-12-07 04:14:00", 
    "stage_change_time":null, 
    "active":false, 
    "deleted":false, 
    "status":"won", 
    "probability":null, 
    "next_activity_date":null, 
    "next_activity_time":null, 
    "next_activity_id":null, 
    "last_activity_id":null, 
    "last_activity_date":null, 
    "lost_reason":null, 
    "visible_to":"3", 
    "close_time":"2017-12-07 04:14:00", 
    "pipeline_id":1, 
    "won_time":"2017-12-07 04:14:00", 
    "first_won_time":"2017-12-07 04:14:00", 
    "lost_time":null, 
    "products_count":0, 
    "files_count":0, 
    "notes_count":0, 
    "followers_count":1, 
    "email_messages_count":0, 
    "activities_count":0, 
    "done_activities_count":0, 
    "undone_activities_count":0, 
    "reference_activities_count":0, 
    "participants_count":1, 
    "expected_close_date":null, 
    "last_incoming_mail_time":null, 
    "last_outgoing_mail_time":null, 
    "stage_order_nr":1, 
    "person_name":"vaishali", 
    "org_name":null, 
    "next_activity_subject":null, 
    "next_activity_type":null, 
    "next_activity_duration":null, 
    "next_activity_note":null, 
    "formatted_value":"₹0", 
    "rotten_time":null, 
    "weighted_value":0, 
    "formatted_weighted_value":"₹0", 
    "owner_name":"riya dalvi", 
    "cc_email":"[email protected]", 
    "org_hidden":false, 
    "person_hidden":false 
    }, 
    "previous":{ 
    "id":1, 
    "public_id":null, 
    "creator_user_id":3371496, 
    "user_id":3371496, 
    "person_id":1, 
    "org_id":null, 
    "stage_id":1, 
    "title":"vaishali deal", 
    "value":0, 
    "currency":"INR", 
    "add_time":"2017-12-04 04:44:15", 
    "update_time":"2017-12-04 06:33:56", 
    "stage_change_time":null, 
    "active":true, 
    "deleted":false, 
    "status":"open", 
    "probability":null, 
    "next_activity_date":null, 
    "next_activity_time":null, 
    "next_activity_id":null, 
    "last_activity_id":null, 
    "last_activity_date":null, 
    "lost_reason":null, 
    "visible_to":"3", 
    "close_time":null, 
    "pipeline_id":1, 
    "won_time":null, 
    "first_won_time":null, 
    "lost_time":null, 
    "products_count":0, 
    "files_count":0, 
    "notes_count":0, 
    "followers_count":1, 
    "email_messages_count":0, 
    "activities_count":0, 
    "done_activities_count":0, 
    "undone_activities_count":0, 
    "reference_activities_count":0, 
    "participants_count":1, 
    "expected_close_date":null, 
    "last_incoming_mail_time":null, 
    "last_outgoing_mail_time":null, 
    "stage_order_nr":1, 
    "person_name":"vaishali", 
    "org_name":null, 
    "next_activity_subject":null, 
    "next_activity_type":null, 
    "next_activity_duration":null, 
    "next_activity_note":null, 
    "formatted_value":"₹0", 
    "rotten_time":null, 
    "weighted_value":0, 
    "formatted_weighted_value":"₹0", 
    "owner_name":"riya dalvi", 
    "cc_email":"[email protected]", 
    "org_hidden":false, 
    "person_hidden":false 
    }, 
    "event":"updated.deal", 
    "retry":0 
} 
+0

'status'と' title'はどちらですか? 'current'と' previous'の内部にそれぞれ1つずつあります。 –

+0

は内部電流です。 –

答えて

1

通常のHTTP呼び出しの場合は、組み込みのJSONモデルバインダーを使用できます。 のように、あなたのメッセージを表すクラスにごJObjectを変更しよう:

public class Message 
{ 
    public Current Current { get; set; } 
} 

public class Current 
{ 
    public string Status { get; set; } 
    public string Title { get; set; } 
} 

(構造が提供JSON表現に更新) とあなたのWebHookでそれを使用します。

[RoutePrefix("api/webhook")] 
public class WebhookController : ApiController 
{ 
    [HttpPost] 
    [Route("")] 
    public void Post(Message message) 
    { 
     Console.WriteLine($"Received webhook: {message.Current.Title} {message.Current.Status}");    
    } 
} 
+0

@BrianRogersあなたは正しいですが、回答を書くときにOPの質問にJSON表現はありませんでした。 – krlm

+0

ありがとう私はこれから値を得て、私はそれを使って値を得た動的オブジェクトに変換しようとしました。 –

0

あなたはこのように試すことができます。

+0

これを試しましたが、両方のフィールドでNULL値が取得されています。 –

+0

メッセージを読みやすくするために再フォーマットしました。私は 'dynamicMessage.current.status'と' dynamicMessage.current.title'がうまくいくと思います。 – AKX

+0

はい、うまくいくはずです。 – lucky

0

私はSelectTokenを使用します。目標値にJSONPathを指定することができます。あなたは以前ステータスとタイトルをしたい場合は

string status = (string)message.SelectToken("current.status"); 
string title = (string)message.SelectToken("current.title"); 

、代わりにprevious.statusprevious.titleを使用する:あなたはどうなる現在ステータスとタイトルをしたいと仮定。

+0

null値を取得しています。 –

+0

[コンソールアプリ](https://dotnetfiddle.net/KK9yxS)でうまく動作します。私はまたあなたのコントローラコードで新しいWeb API 2プロジェクトでそれを試してみました。あなたの 'JObject'がその中にデータを持っていることとJSONがあなたの質問に掲示されているものと同じ構造を持っていることを確認してください。 JSONが異なる場合は、それに応じてJSONPathを調整する必要があります。 –

関連する問題