static void Main(string[] args)
        {
            string jsonString  = "{\"data\":[{\"key\":\"Audio\",\"it.e][\\\"ms\":[{\"key\":\"Bluetooth Headphones\",\"items\":null,\"count\":13482,\"summary\":[12099500.9899]}]}],\"totalCount\":1000000,\"summary\":[3638256074.5103]}";
            string jsonString2 = "[[{\"key\":\"Bluetooth Headphones\",\"items\":null,\"count\":13482,\"summary\":[12099500.9899]}],[\"value\"]]";
            string jsonString1 = "{\"ABC\": [\"a\", \"b\"]}";
            var    obj         = JsonSerializerUtil.Deserialize(jsonString);

            Console.WriteLine("Enter conversion option (0: Default, 1: JToken): ");
            var convertOption = Console.ReadLine();

            Console.Clear();
            if (convertOption == "1")
            {
                Console.WriteLine("Converting JSON to Object Initializer using Token types");
                string objectIniOutput = new JTokenConverter().ConstructObjectInitializerFormat(obj);
                Console.WriteLine(objectIniOutput);
            }
            else if (convertOption == "0")
            {
                Console.WriteLine("Converting JSON to Object Initializer using Property names");
                string objectIniOutput = new DefaultConverter().ConstructObjectInitializerFormat(obj);
                Console.WriteLine(objectIniOutput);
            }
            else
            {
                Console.WriteLine("Invalid option provided.");
            }

            Console.ReadLine();
        }
Пример #2
0
        private static string Convert(string path)
        {
            var schemaText = File.ReadAllText(path);
            var jset       = new JsonLoadSettings {
                CommentHandling = CommentHandling.Load
            };
            var obj = JToken.Parse(schemaText, jset);

            return(JTokenConverter.Convert(obj));
        }
Пример #3
0
        private async void JsonMenuItemCallback(object sender, EventArgs e)
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            try
            {
                var schemaText = Clipboard.GetText();
                var doc        = JToken.Parse(schemaText, new JsonLoadSettings {
                    CommentHandling = CommentHandling.Load
                });
                var classText = JTokenConverter.Convert(doc, Options.ToConverterOptions());

                try
                {
                    dte.UndoContext.Open("Paste JSON Schema as Class");
                    var selection = (TextSelection)dte.ActiveDocument.Selection;
                    if (selection != null)
                    {
                        selection.Insert(classText);
                        dte.ActiveDocument.Activate();
                        dte.ExecuteCommand("Edit.FormatDocument");
                    }
                }
                finally
                {
                    dte.UndoContext.Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    "Copied text is not a JSON!\r\n" + ex.Message,
                    "JSON Error",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
            }
        }
Пример #4
0
        /// <summary>
        /// サービス実行
        /// </summary>
        /// <param name="config">設定項目</param>
        public static async Task Execute(WebhookServiceConfig config)
        {
            Trace.TraceInformation("Start");

            // 引数のnullチェック
            if (config == null)
            {
                Trace.TraceInformation("Config is Null");
                return;
            }

            // 署名の検証を行う場合
            if (config.IsExecuteVerifySign)
            {
                // 署名の検証
                bool verifySignResult = await AuthenticationService.VerifySign(GetSignature( config.RequestHeaders ), config.RequestContent).ConfigureAwait(false);

                // NGなら以下の処理を行わない
                if (!verifySignResult)
                {
                    Trace.TraceInformation("Verify Sign Result is NG");
                    return;
                }
            }

            // リクエストトークンをデータモデルに変換
            WebhookRequest request = JTokenConverter.ConvertJTokenToWebhookRequest(config.RequestJToken) ?? new WebhookRequest();

            // チャンネルアクセストークンの取得
            string channelAccessToken;

            // ロングタームチャンネルアクセストークンを使用する場合
            if (config.IsUseLongTermChannelAccessToken)
            {
                channelAccessToken = ConfigurationManager.AppSettings["LongTermChannelAccessToken"];
            }

            // ロングタームチャンネルアクセストークンを使用しない場合はチャンネルアクセストークンを発行する
            else
            {
                IssueChannelAccessTokenResponse channelAccessTokenResponse = await AuthenticationService.IssueChannelAccessToken().ConfigureAwait(false);

                channelAccessToken = channelAccessTokenResponse?.access_token;
            }

            // イベント毎に分岐
            foreach (EventBase webhookEvent in request.events)
            {
                // 友達追加時イベント
                if (webhookEvent is FollowEvent)
                {
                    config.FollowEventHandler?.Invoke(channelAccessToken, (webhookEvent as FollowEvent)?.replyToken);
                }

                // ブロック時イベント
                else if (webhookEvent is UnfollowEvent)
                {
                    config.UnfollowEventHandler?.Invoke();
                }

                // グループ追加時イベント
                else if (webhookEvent is JoinEvent)
                {
                    config.JoinEventHandler?.Invoke(channelAccessToken, (webhookEvent as JoinEvent)?.replyToken);
                }

                // グループ退会時イベント
                else if (webhookEvent is LeaveEvent)
                {
                    config.LeaveEventHandler?.Invoke();
                }

                // メッセージイベント
                else if (webhookEvent is MessageEvent)
                {
                    MessageEvent messageEvent = webhookEvent as MessageEvent;

                    // 音声
                    if (messageEvent?.message is AudioMessage)
                    {
                        config.AudioMessageEventHandler?.Invoke();
                    }

                    // ファイル
                    else if (messageEvent?.message is FileMessage)
                    {
                        config.FileMessageEventHandler?.Invoke();
                    }

                    // 画像
                    else if (messageEvent?.message is ImageMessage)
                    {
                        config.ImageMessageEventHandler?.Invoke();
                    }

                    // 位置情報
                    else if (messageEvent?.message is LocationMessage)
                    {
                        config.LocationMessageEventHandler?.Invoke();
                    }

                    // スタンプ
                    else if (messageEvent?.message is StickerMessage)
                    {
                        config.StickerMessageEventHandler?.Invoke();
                    }

                    // テキスト
                    else if (messageEvent?.message is TextMessage)
                    {
                        TextMessage textMessage = messageEvent?.message as TextMessage;
                        config.TextMessageEventHandler?.Invoke(channelAccessToken, messageEvent?.source, messageEvent?.replyToken, textMessage?.text);
                    }

                    // 動画
                    else if (messageEvent?.message is VideoMessage)
                    {
                        config.VideoMessageEventHandler?.Invoke();
                    }

                    // 想定外のイベントの時は何もしない
                    else
                    {
                        Trace.TraceError("Unexpected Type");
                    }
                }

                // ポストバックイベント
                else if (webhookEvent is PostbackEvent)
                {
                    config.PostbackMessageEventHandler?.Invoke();
                }

                // ビーコンイベント
                else if (webhookEvent is BeaconEvent)
                {
                    // バナータップ時イベント
                    if (((BeaconEvent)webhookEvent)?.beacon is BannerBeacon)
                    {
                        config.BannerBeaconEventHandler?.Invoke();
                    }

                    // バナー受信圏内に入った時のイベント
                    else if (((BeaconEvent)webhookEvent)?.beacon is EnterBeacon)
                    {
                        config.EnterBeaconEventHandler?.Invoke();
                    }

                    // バナー受信圏外に出た時のイベント
                    else if (((BeaconEvent)webhookEvent)?.beacon is LeaveBeacon)
                    {
                        config.LeaveBeaconEventHandler?.Invoke();
                    }

                    // 想定外のイベントの時は何もしない
                    else
                    {
                        Trace.TraceError("Unexpected Beacon Type");
                    }
                }

                else
                {
                    Trace.TraceError("Unexpected Message Type");
                }
            }

            Trace.TraceInformation("End");
        }
Пример #5
0
        public void Roundtrip_WorksGood()
        {
            Player player = PersonFactory.CreatePlayer();

            var settings = new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.Auto,
            };

            var serializer = JsonSerializer.CreateDefault(settings);

            JToken token = JToken.FromObject(player, serializer);

            var converter = new JTokenConverter(JsonXmlSettings.Defaults);

            var xnode = converter.ToXNode(token);

            var actualXml = new XElement(
                XNamespace.None.GetName("wrap"),
                new XAttribute(XNamespace.Xmlns.GetName("jxml"), "http://www.xmlsh.org/jxml"),
                new XAttribute(XNamespace.Xmlns.GetName("jsonx"), "http://www.json.net/xml"),
                xnode);

            var expectedXml = XDocument.Parse(@"<wrap xmlns:jxml=""http://www.xmlsh.org/jxml"" xmlns:jsonx=""http://www.json.net/xml"">
  <jxml:object>
    <jxml:member name=""TelephoneNumbers"">
      <jxml:array>
        <jxml:object>
          <jxml:member name=""Type"">
            <jsonx:integer>0</jsonx:integer>
          </jxml:member>
          <jxml:member name=""CountryCode"">
            <jxml:string>44</jxml:string>
          </jxml:member>
          <jxml:member name=""AreaCode"">
            <jxml:string>151</jxml:string>
          </jxml:member>
          <jxml:member name=""LocalNumber"">
            <jxml:string>123 4567</jxml:string>
          </jxml:member>
          <jxml:member name=""RawNumber"">
            <jxml:null />
          </jxml:member>
        </jxml:object>
        <jxml:object>
          <jxml:member name=""Type"">
            <jsonx:integer>1</jsonx:integer>
          </jxml:member>
          <jxml:member name=""CountryCode"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""AreaCode"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""LocalNumber"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""RawNumber"">
            <jxml:string>+31 (141) 123 4567</jxml:string>
          </jxml:member>
        </jxml:object>
      </jxml:array>
    </jxml:member>
    <jxml:member name=""Addresses"">
      <jxml:array>
        <jxml:object>
          <jxml:member name=""Type"">
            <jsonx:integer>0</jsonx:integer>
          </jxml:member>
          <jxml:member name=""PropertyNumber"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""PropertyName"">
            <jxml:string>14</jxml:string>
          </jxml:member>
          <jxml:member name=""Street"">
            <jxml:string>Some Road</jxml:string>
          </jxml:member>
          <jxml:member name=""Locality"">
            <jxml:string>Some town</jxml:string>
          </jxml:member>
          <jxml:member name=""Region"">
            <jxml:string>My county</jxml:string>
          </jxml:member>
          <jxml:member name=""Country"">
            <jxml:string>My country</jxml:string>
          </jxml:member>
          <jxml:member name=""PostalCode"">
            <jxml:string>RG5 3AS</jxml:string>
          </jxml:member>
        </jxml:object>
        <jxml:object>
          <jxml:member name=""Type"">
            <jsonx:integer>1</jsonx:integer>
          </jxml:member>
          <jxml:member name=""PropertyNumber"">
            <jsonx:integer>5</jsonx:integer>
          </jxml:member>
          <jxml:member name=""PropertyName"">
            <jxml:null />
          </jxml:member>
          <jxml:member name=""Street"">
            <jxml:string>Some Road</jxml:string>
          </jxml:member>
          <jxml:member name=""Locality"">
            <jxml:string>Some town</jxml:string>
          </jxml:member>
          <jxml:member name=""Region"">
            <jxml:string>My county</jxml:string>
          </jxml:member>
          <jxml:member name=""Country"">
            <jxml:string>My country</jxml:string>
          </jxml:member>
          <jxml:member name=""PostalCode"">
            <jxml:string>RG5 3AS</jxml:string>
          </jxml:member>
        </jxml:object>
      </jxml:array>
    </jxml:member>
    <jxml:member name=""DateOfBirth"">
      <jsonx:dateTime>1965-04-15T00:00:00</jsonx:dateTime>
    </jxml:member>
    <jxml:member name=""Notes"">
      <jxml:array>
        <jxml:object>
          <jxml:member name=""$type"">
            <jxml:string>JsonXml.Test.POCOs.SpecialNote, JsonXml.Test</jxml:string>
          </jxml:member>
          <jxml:member name=""Blah"">
            <jsonx:integer>1</jsonx:integer>
          </jxml:member>
          <jxml:member name=""Note"">
            <jxml:string>This is some note content unicode--&gt;ᶍ&lt;--unicode</jxml:string>
          </jxml:member>
          <jxml:member name=""Recorded"">
            <jsonx:dateTimeOffset>2013-04-06T10:53:28.456+05:00</jsonx:dateTimeOffset>
          </jxml:member>
        </jxml:object>
      </jxml:array>
    </jxml:member>
    <jxml:member name=""Image"">
      <jsonx:bytes>EhUX</jsonx:bytes>
    </jxml:member>
    <jxml:member name=""Website"">
      <jsonx:uri>http://mywebsite.com/</jsonx:uri>
    </jxml:member>
    <jxml:member name=""TimeWithClub"">
      <jsonx:duration>P237DT5H4M17S</jsonx:duration>
    </jxml:member>
    <jxml:member name=""ID"">
      <jsonx:uuid>0d476eb3-0f4d-40ef-81a7-ea9d2bdefc18</jsonx:uuid>
    </jxml:member>
    <jxml:member name=""Name"">
      <jxml:object>
        <jxml:member name=""Title"">
          <jxml:string>Mr</jxml:string>
        </jxml:member>
        <jxml:member name=""FirstName"">
          <jxml:string>Joe</jxml:string>
        </jxml:member>
        <jxml:member name=""LastName"">
          <jxml:string>Bloggs</jxml:string>
        </jxml:member>
      </jxml:object>
    </jxml:member>
  </jxml:object>
</wrap>").FirstNode;

            Assert.IsTrue(XNode.DeepEquals(expectedXml, actualXml), "XNode should be identical");

            var token2 = converter.ToJToken(xnode);

            var player2 = token2.ToObject <Player>(serializer);

            JToken token3 = JToken.FromObject(player2, serializer);

            Assert.IsTrue(JToken.DeepEquals(token, token3), "Tokens should match");
        }