using Newtonsoft.Json.Linq;
using System.Collections.Generic;
public static void Main()
string json = @"{""topicName"": ""channel.metadata"", ""eventBody"": {""message"": ""WebSocket Heartbeat""}}";
string conversationJson = "{\r\n \"topicName\": \"v2.users.c3477f98-65bb-4dbc-8bef-8e91ab30d81a.conversations\",\r\n \"version\": \"2\",\r\n \"eventBody\": {\r\n \"id\": \"0c73075f-77dc-48a9-8b75-c173ea7623d9\",\r\n \"participants\": [\r\n {\r\n \"id\": \"ffb61112-132a-4f15-aa78-3a821e5467dd\",\r\n \"connectedTime\": \"2021-04-29T16:19:45.276Z\",\r\n \"endTime\": \"2021-04-29T16:20:18.139Z\",\r\n \"name\": \"Washington DC\",\r\n \"queueId\": \"c66a7864-1a04-4597-958f-7618a9f2f467\",\r\n \"purpose\": \"customer\",\r\n \"address\": \"tel:+12028668989\",\r\n \"wrapupRequired\": false,\r\n \"wrapupExpected\": false,\r\n \"attributes\": {},\r\n \"calls\": [\r\n {\r\n \"id\": \"86124ac9-63dc-4911-a0fb-e276de02e18b\",\r\n \"state\": \"terminated\",\r\n \"recording\": false,\r\n \"recordingState\": \"none\",\r\n \"muted\": false,\r\n \"confined\": false,\r\n \"held\": false,\r\n \"disconnectType\": \"endpoint\",\r\n \"direction\": \"inbound\",\r\n \"self\": {\r\n \"name\": \"Washington DC\",\r\n \"nameRaw\": \"\",\r\n \"addressNormalized\": \"tel:+12028668989\",\r\n \"addressRaw\": \"sip:+12028668989@54.244.22.120\",\r\n \"addressDisplayable\": \"unavailable\",\r\n \"additionalProperties\": {}\r\n },\r\n \"other\": {\r\n \"name\": \"Toronto ON\",\r\n \"nameRaw\": \"\",\r\n \"addressNormalized\": \"tel:+16477926222\",\r\n \"addressRaw\": \"sip:+16477926222@10.87.10.174:8140;transport=tcp\",\r\n \"addressDisplayable\": \"unavailable\",\r\n \"additionalProperties\": {}\r\n },\r\n \"provider\": \"Edge\",\r\n \"connectedTime\": \"2021-04-29T16:19:45.276Z\",\r\n \"disconnectedTime\": \"2021-04-29T16:20:18.139Z\",\r\n \"afterCallWorkRequired\": false,\r\n \"additionalProperties\": {}\r\n }\r\n ],\r\n \"additionalProperties\": {}\r\n },\r\n {\r\n \"id\": \"01f40234-b36c-4a41-b105-aba057248424\",\r\n \"connectedTime\": \"2021-04-29T16:19:45.202Z\",\r\n \"endTime\": \"2021-04-29T16:19:51.667Z\",\r\n \"name\": \"Toronto ON\",\r\n \"purpose\": \"ivr\",\r\n \"address\": \"sip:85e076c9-610a-4192-a68a-7bafb558285a@127.0.0.1;language=en-US;user=ivr\",\r\n \"wrapupRequired\": false,\r\n \"wrapupExpected\": false,\r\n \"attributes\": {},\r\n \"calls\": [\r\n {\r\n \"id\": \"4b505029-42fd-4f11-91d1-77cee523d53c\",\r\n \"state\": \"terminated\",\r\n \"recording\": false,\r\n \"recordingState\": \"none\",\r\n \"muted\": false,\r\n \"confined\": false,\r\n \"held\": false,\r\n \"disconnectType\": \"transfer\",\r\n \"direction\": \"inbound\",\r\n \"self\": {\r\n \"name\": \"Toronto ON\",\r\n \"nameRaw\": \"Toronto ON\",\r\n \"addressNormalized\": \"sip:85e076c9-610a-4192-a68a-7bafb558285a@127.0.0.1;language=en-US;user=ivr\",\r\n \"addressRaw\": \"sip:85e076c9-610a-4192-a68a-7bafb558285a@127.0.0.1;language=en-US;user=ivr\",\r\n \"addressDisplayable\": \"unavailable\",\r\n \"additionalProperties\": {}\r\n },\r\n \"other\": {\r\n \"name\": \"Washington DC\",\r\n \"nameRaw\": \"Washington DC\",\r\n \"addressNormalized\": \"tel:+12028668989\",\r\n \"addressRaw\": \"sip:+12028668989@10.87.10.174;user=phone\",\r\n \"addressDisplayable\": \"unavailable\",\r\n \"additionalProperties\": {}\r\n },\r\n \"provider\": \"Edge\",\r\n \"peerId\": \"86124ac9-63dc-4911-a0fb-e276de02e18b\",\r\n \"connectedTime\": \"2021-04-29T16:19:45.202Z\",\r\n \"disconnectedTime\": \"2021-04-29T16:19:51.667Z\",\r\n \"afterCallWorkRequired\": false,\r\n \"additionalProperties\": {}\r\n }\r\n ],\r\n \"additionalProperties\": {}\r\n },\r\n {\r\n \"id\": \"081547d0-50e6-4ad4-b37c-03fae6c00f73\",\r\n \"connectedTime\": \"2021-04-29T16:19:51.672Z\",\r\n \"endTime\": \"2021-04-29T16:19:53.542Z\",\r\n \"name\": \"HammerQueue\",\r\n \"queueId\": \"c66a7864-1a04-4597-958f-7618a9f2f467\",\r\n \"purpose\": \"acd\",\r\n \"address\": \"sip:c66a7864-1a04-4597-958f-7618a9f2f467@127.0.0.1;language=en-US;src=https://edge-proxy.usw2.pure.cloud/connector/v1/organizations/2eef9b63-bc03-4d5f-9f5d-8c77ae28e7c0/defaults/ivr/2bf1c47e-969a-4ee2-8ea4-46a808770bf0/defaultentrypoint.vxml;user=acd\",\r\n \"wrapupRequired\": false,\r\n \"wrapupExpected\": false,\r\n \"conversationRoutingData\": {\r\n \"queue\": {\r\n \"id\": \"c66a7864-1a04-4597-958f-7618a9f2f467\"\r\n },\r\n \"language\": {},\r\n \"priority\": 0\r\n },\r\n \"attributes\": {},\r\n \"calls\": [\r\n {\r\n \"id\": \"77bb9a97-c264-4eed-8013-e35c4303d47c\",\r\n \"state\": \"terminated\",\r\n \"recording\": false,\r\n \"recordingState\": \"none\",\r\n \"muted\": false,\r\n \"confined\": false,\r\n \"held\": false,\r\n \"disconnectType\": \"transfer\",\r\n \"direction\": \"inbound\",\r\n \"self\": {\r\n \"name\": \"HammerQueue\",\r\n \"nameRaw\": \"HammerQueue\",\r\n \"addressNormalized\": \"sip:c66a7864-1a04-4597-958f-7618a9f2f467@127.0.0.1;language=en-US;src=https://edge-proxy.usw2.pure.cloud/connector/v1/organizations/2eef9b63-bc03-4d5f-9f5d-8c77ae28e7c0/defaults/ivr/2bf1c47e-969a-4ee2-8ea4-46a808770bf0/defaultentrypoint.vxml;user=acd\",\r\n \"addressRaw\": \"sip:c66a7864-1a04-4597-958f-7618a9f2f467@127.0.0.1;language=en-US;src=https://edge-proxy.usw2.pure.cloud/connector/v1/organizations/2eef9b63-bc03-4d5f-9f5d-8c77ae28e7c0/defaults/ivr/2bf1c47e-969a-4ee2-8ea4-46a808770bf0/defaultentrypoint.vxml;user=acd\",\r\n \"addressDisplayable\": \"unavailable\",\r\n \"additionalProperties\": {}\r\n },\r\n \"other\": {\r\n \"name\": \"Washington DC\",\r\n \"nameRaw\": \"Washington DC\",\r\n \"addressNormalized\": \"tel:+12028668989\",\r\n \"addressRaw\": \"sip:+12028668989@10.87.10.174;user=phone\",\r\n \"addressDisplayable\": \"unavailable\",\r\n \"additionalProperties\": {}\r\n },\r\n \"provider\": \"Edge\",\r\n \"peerId\": \"86124ac9-63dc-4911-a0fb-e276de02e18b\",\r\n \"connectedTime\": \"2021-04-29T16:19:51.672Z\",\r\n \"disconnectedTime\": \"2021-04-29T16:19:53.542Z\",\r\n \"disconnectReasons\": [\r\n {\r\n \"type\": \"sip\",\r\n \"code\": 410,\r\n \"phrase\": \"Gone\"\r\n }\r\n ],\r\n \"afterCallWorkRequired\": false,\r\n \"additionalProperties\": {}\r\n }\r\n ],\r\n \"additionalProperties\": {}\r\n },\r\n {\r\n \"id\": \"0a374873-1185-476b-8226-199a07434f78\",\r\n \"connectedTime\": \"2021-04-29T16:19:53.541Z\",\r\n \"endTime\": \"2021-04-29T16:20:18.131Z\",\r\n \"userId\": \"c3477f98-65bb-4dbc-8bef-8e91ab30d81a\",\r\n \"queueId\": \"c66a7864-1a04-4597-958f-7618a9f2f467\",\r\n \"purpose\": \"agent\",\r\n \"address\": \"sip:606da8e7d471c81b177967da+afinitidemo.orgspan.com;tgrp=6c4f8ee4-31ba-478c-bd11-ed8b45d775dd;trunk-context=afinitidemo@localhost\",\r\n \"wrapupRequired\": true,\r\n \"wrapupExpected\": true,\r\n \"wrapupPrompt\": \"timeout\",\r\n \"wrapupTimeoutMs\": 1000,\r\n \"wrapup\": {\r\n \"code\": \"ININ-WRAP-UP-TIMEOUT\",\r\n \"durationSeconds\": 1,\r\n \"endTime\": \"2021-04-29T16:20:19.210Z\",\r\n \"additionalProperties\": {}\r\n },\r\n \"startAcwTime\": \"2021-04-29T16:20:18.131Z\",\r\n \"endAcwTime\": \"2021-04-29T16:20:19.210Z\",\r\n \"alertingTimeoutMs\": 8000,\r\n \"attributes\": {},\r\n \"calls\": [\r\n {\r\n \"id\": \"e0424277-2575-498b-a841-76f56ea462ea\",\r\n \"state\": \"terminated\",\r\n \"recording\": false,\r\n \"recordingState\": \"none\",\r\n \"muted\": false,\r\n \"confined\": false,\r\n \"held\": false,\r\n \"disconnectType\": \"peer\",\r\n \"direction\": \"inbound\",\r\n \"self\": {\r\n \"nameRaw\": \"hammer2@afiniti.com\",\r\n \"addressNormalized\": \"sip:606da8e7d471c81b177967da+afinitidemo.orgspan.com;tgrp=6c4f8ee4-31ba-478c-bd11-ed8b45d775dd;trunk-context=afinitidemo@localhost\",\r\n \"addressRaw\": \"sip:606da8e7d471c81b177967da+afinitidemo.orgspan.com@10.87.26.19;language=en-US;user=station\",\r\n \"addressDisplayable\": \"unavailable\",\r\n \"additionalProperties\": {}\r\n },\r\n \"other\": {\r\n \"name\": \"Washington DC\",\r\n \"nameRaw\": \"Washington DC\",\r\n \"addressNormalized\": \"sip:+12028668989@10.87.10.174;user=phone\",\r\n \"addressRaw\": \"sip:+12028668989@10.87.10.174;user=phone\",\r\n \"addressDisplayable\": \"unavailable\",\r\n \"additionalProperties\": {}\r\n },\r\n \"provider\": \"Edge\",\r\n \"peerId\": \"86124ac9-63dc-4911-a0fb-e276de02e18b\",\r\n \"connectedTime\": \"2021-04-29T16:19:53.541Z\",\r\n \"disconnectedTime\": \"2021-04-29T16:20:18.131Z\",\r\n \"afterCallWork\": {\r\n \"state\": \"complete\",\r\n \"startTime\": \"2021-04-29T16:20:18.131Z\",\r\n \"endTime\": \"2021-04-29T16:20:19.210Z\"\r\n },\r\n \"afterCallWorkRequired\": false,\r\n \"additionalProperties\": {}\r\n }\r\n ],\r\n \"additionalProperties\": {}\r\n }\r\n ],\r\n \"recordingState\": \"none\",\r\n \"address\": \"tel:+16477926222\"\r\n },\r\n \"metadata\": {\r\n \"CorrelationId\": \"e1839fe6-193a-460d-ac52-cfe3ba22d9f0\"\r\n }\r\n}";
var result = JObject.Parse(conversationJson);
var test = result["topicName"];
Console.WriteLine(result["topicName"]);
if(result["topicName"].Value<string>().Contains("v2.users") && result["topicName"].Value<string>().Contains("conversations"))
var conversationObj = JsonConvert.DeserializeObject<Conversation>(conversationJson);
foreach(var participant in conversationObj.eventBody.participants)
Console.WriteLine(participant.id);
public class Notification
public string topicName { get;set;}
public dynamic eventBody { get; set; }
public class AdditionalProperties
public string name { get; set; }
public string nameRaw { get; set; }
public string addressNormalized { get; set; }
public string addressRaw { get; set; }
public string addressDisplayable { get; set; }
public AdditionalProperties additionalProperties { get; set; }
public string name { get; set; }
public string nameRaw { get; set; }
public string addressNormalized { get; set; }
public string addressRaw { get; set; }
public string addressDisplayable { get; set; }
public AdditionalProperties additionalProperties { get; set; }
public class DisconnectReason
public string type { get; set; }
public int code { get; set; }
public string phrase { get; set; }
public class AfterCallWork
public string state { get; set; }
public DateTime startTime { get; set; }
public DateTime endTime { get; set; }
public string id { get; set; }
public string state { get; set; }
public bool recording { get; set; }
public string recordingState { get; set; }
public bool muted { get; set; }
public bool confined { get; set; }
public bool held { get; set; }
public string disconnectType { get; set; }
public string direction { get; set; }
public Self self { get; set; }
public Other other { get; set; }
public string provider { get; set; }
public DateTime connectedTime { get; set; }
public DateTime disconnectedTime { get; set; }
public bool afterCallWorkRequired { get; set; }
public AdditionalProperties additionalProperties { get; set; }
public string peerId { get; set; }
public List<DisconnectReason> disconnectReasons { get; set; }
public AfterCallWork afterCallWork { get; set; }
public string id { get; set; }
public class ConversationRoutingData
public Queue queue { get; set; }
public Language language { get; set; }
public int priority { get; set; }
public string code { get; set; }
public int durationSeconds { get; set; }
public DateTime endTime { get; set; }
public AdditionalProperties additionalProperties { get; set; }
public string id { get; set; }
public DateTime connectedTime { get; set; }
public DateTime endTime { get; set; }
public string name { get; set; }
public string queueId { get; set; }
public string purpose { get; set; }
public string address { get; set; }
public bool wrapupRequired { get; set; }
public bool wrapupExpected { get; set; }
public Attributes attributes { get; set; }
public List<Call> calls { get; set; }
public AdditionalProperties additionalProperties { get; set; }
public ConversationRoutingData conversationRoutingData { get; set; }
public string userId { get; set; }
public string wrapupPrompt { get; set; }
public int? wrapupTimeoutMs { get; set; }
public Wrapup wrapup { get; set; }
public DateTime? startAcwTime { get; set; }
public DateTime? endAcwTime { get; set; }
public int? alertingTimeoutMs { get; set; }
public string id { get; set; }
public List<Participant> participants { get; set; }
public string recordingState { get; set; }
public string address { get; set; }
public string CorrelationId { get; set; }
public class Conversation
public string topicName { get; set; }
public string version { get; set; }
public EventBody eventBody { get; set; }
public Metadata metadata { get; set; }