{"id":296444,"date":"2019-12-26T15:00:35","date_gmt":"2019-12-26T15:00:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=296444"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=296444","title":{"rendered":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Newtonsoft.Json \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u0427\u0430\u0441\u0442\u044c 2"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/482042\/\">\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u044b\u043b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 JSON \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043a \u0442\u0438\u043f\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d newtonsoft.json.linq, \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u044f\u0437\u044b\u043a\u0430 C#. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0438\u0442\u0438\u043a\u0438, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0439. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0443\u0447\u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/3l\/5k\/h7\/3l5kh7oqau8g7rjl5_urm3bcv-u.png\"><br \/>  <a name=\"habracut\"><\/a><br \/>  \u0414\u0430\u043b\u0435\u0435 \u0440\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0443 JSON. \u041d\u0430\u043f\u043e\u043c\u043d\u044e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b Parse() \u0438 ToObject&lt;\u0422&gt;() \u043a\u043b\u0430\u0441\u0441\u043e\u0432 JObject \u0438 JArray \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d newtonsoft.json.linq:  <\/p>\n<pre><code class=\"cs\">HttpClient httpClient = new HttpClient(); string request = \"https:\/\/api.exmo.com\/v1\/trades\/?pair=BTC_USD,ETH_USD\"; HttpResponseMessage response =      (await httpClient.GetAsync(request)).EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync();  JObject jObject = JObject.Parse(responseBody); Dictionary&lt;string, List&lt;Order&gt;&gt; dict =      jObject.ToObject&lt;Dictionary&lt;string, List&lt;Order&gt;&gt;&gt;(); <\/code><\/pre>\n<p>  \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d newtonsof.json \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 JsonConvert \u0435\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 DeserializeObject&lt;&gt;, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b C#, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c \u043d\u043e\u0442\u0430\u0446\u0438\u0438 JSON:  <\/p>\n<pre><code class=\"cs\">Dictionary&lt;string, List&lt;Order&gt;&gt; JsonObject =      JsonConvert.DeserializeObject&lt;Dictionary&lt;string, List&lt;Order&gt;&gt;&gt;(responseBody); List&lt;string&gt; Json_Array = JsonConvert.DeserializeObject&lt;List&lt;string&gt;&gt;(responseBody); <\/code><\/pre>\n<p>  \u0418 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c using newtonsoft.json.<br \/>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u2014 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Microsoft.AspNet.WebApi.Client (\u0442\u0430\u043a \u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 NuGet), \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 ReadAsAsync:  <\/p>\n<pre><code class=\"cs\">Dictionary&lt;string, List&lt;Order&gt;&gt; JsonObject = await     (await httpClient.GetAsync(request)).     EnsureSuccessStatusCode().Content.     ReadAsAsync&lt;Dictionary&lt;string, List&lt;Order&gt;&gt;&gt;(); <\/code><\/pre>\n<p>  \u0417\u0430 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0443 \u0441\u043f\u0430\u0441\u0438\u0431\u043e <a href=\"https:\/\/habr.com\/ru\/post\/481514\/#comment_21047128\">lair<\/a>.<\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 Order:  <\/p>\n<pre><code class=\"cs\">    class Order     {         public int trade_id { get; set; }         public string type { get; set; }         public double quantity { get; set; }         public double price { get; set; }         public double amount { get; set; }         public int date { get; set; }     } <\/code><\/pre>\n<p>  \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u043e\u043d \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e JSON C# Class Generator`\u043e\u043c. \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. <br \/>  \u041f\u0435\u0440\u0432\u044b\u0439 \u2014 \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439. \u041d\u0443 \u0438 \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 Order \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0447\u0442\u043e \u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f OrderID (\u0430 \u043d\u0435 traid_id, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438). \u0427\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b JSON \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 JsonProperty:  <\/p>\n<pre><code class=\"cs\">    class Order     {         [JsonProperty(\"trade_id\")]         public int OrderID { get; set; }         [JsonProperty(\"type\")]         public string Type { get; set; }         [JsonProperty(\"quantity\")]         public double Quantity { get; set; }         [JsonProperty(\"price\")]         public double Price { get; set; }         [JsonProperty(\"amount\")]         public double Amount { get; set; }         [JsonProperty(\"date\")]         public int Date { get; set; }     } <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u201ctrade_id\u201d, \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e OrderID, \u201ctype\u201d \u0432 Type \u0438 \u0442.\u0434. \u0422\u0430\u043a \u0436\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 JsonProperty \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u043b\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \/ \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b private \u0438\u043b\u0438 static \u2014 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u0430\u043a\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f.<br \/>  \u0412 \u0438\u0442\u043e\u0433\u0435, \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0441\u0435\u0445 OrderID \u0441\u0434\u0435\u043b\u043e\u043a \u043f\u043e \u0432\u0430\u043b\u044e\u0442\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c BTC_USD \u0438 ETH_USD, \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cs\">using HttpClient httpClient = new HttpClient(); string request = \"https:\/\/api.exmo.com\/v1\/trades\/?pair=BTC_USD,ETH_USD\"; string responseBody = await     (await httpClient.GetAsync(request)).     EnsureSuccessStatusCode().     Content.ReadAsStringAsync();  Dictionary&lt;string, List&lt;Order&gt;&gt; PairList =      JsonConvert.DeserializeObject&lt;Dictionary&lt;string, List&lt;Order&gt;&gt;&gt;(responseBody);  List&lt;int&gt; IDs = new List&lt;int&gt;(); foreach (var pair in PairList)     foreach (var order in pair.Value)         IDs.Add(order.OrderID); <\/code><\/pre>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435 Date. \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, JSON C# Class Generator \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u201cdate\u201d \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u041d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0431\u044b\u043b\u043e \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Date \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043c\u0435\u043b\u043e \u0442\u0438\u043f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0434\u0430\u0442 \u2014 DateTime. \u041a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0434\u0430\u043b\u0435\u0435.<\/p>\n<h3>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0442\u0430\u043c\u0438<\/h3>\n<p>  \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0440\u0430\u0437\u0443 <a href=\"https:\/\/www.newtonsoft.com\/json\/help\/html\/datesinjson.htm\" rel=\"nofollow\">\u0441\u0442\u0430\u0442\u044c\u0438 <\/a>\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e newtonsof.json, \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u0442\u0430\u043c\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043a\u0430\u043a \u201cDateTime \u0432 JSON \u2014 \u044d\u0442\u043e \u0442\u044f\u0436\u043a\u043e\u201d. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0430\u043c\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f JSON \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<br \/>  \u0412\u0441\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043a\u043e\u0433\u0434\u0430 \u0434\u0430\u0442\u0430 \u0432 JSON \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u0442\u0440\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432: \u201c\u041c\u0430\u0439\u043a\u0440\u043e\u0441\u043e\u0444\u0442\u201d (\u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c), \u201cJavaScript\u201d (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/Unix-%D0%B2%D1%80%D0%B5%D0%BC%D1%8F\" rel=\"nofollow\">Unix <\/a>\u0432\u0440\u0435\u043c\u044f) \u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/ISO_8601\" rel=\"nofollow\">ISO 8601<\/a>. \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432:  <\/p>\n<pre><code class=\"cs\">Dictionary&lt;string, DateTime&gt; d =      new Dictionary&lt;string, DateTime&gt; { { \"date\", DateTime.Now } }; string isoDate = JsonConvert.SerializeObject(d);             \/\/ {\"date\":\"2019-12-19T14:10:31.3708939+03:00\"}  JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings {     DateFormatHandling = DateFormatHandling.MicrosoftDateFormat }; string microsoftDate = JsonConvert.SerializeObject(d, microsoftDateFormatSettings);             \/\/ {\"date\":\"\\\/Date(1576753831370+0300)\\\/\"}  string javascriptDate = JsonConvert.SerializeObject(d, new JavaScriptDateTimeConverter());             \/\/ {\"date\":new Date(1576753831370)} <\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0431\u0438\u0440\u0436\u0435\u0439 Exmo, \u0432\u0441\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0412 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 API \u0431\u0438\u0440\u0436\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Unix (JavaScript). \u0418, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 Date \u043a\u043b\u0430\u0441\u0441\u0430 Order \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0438\u0437 \u043a\u043b\u0430\u0441\u0441\u0430 JavaScriptDateTimeConverter(), \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u0442\u0443, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u0443\u044e \u043a \u0442\u0438\u043f\u0443 DateTime:  <\/p>\n<pre><code class=\"cs\">    class Order     {         [JsonProperty(\"trade_id\")]         public int OrderID { get; set; }         [JsonProperty(\"type\")]         public string Type { get; set; }         [JsonProperty(\"quantity\")]         public double Quantity { get; set; }         [JsonProperty(\"price\")]         public double Price { get; set; }         [JsonProperty(\"amount\")]         public double Amount { get; set; }         [JsonProperty(\"date\", ItemConverterType = typeof(JavaScriptDateTimeConverter))]         public DateTime Date { get; set; }     } <\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0438\u043f\u0430 DateTime \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0435 \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 Newtonsoft.Json.JsonReaderException. \u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 JavaScriptDateTimeConverter \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0438\u043f DateTime (\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a).<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/0r\/ra\/lb\/0rralbgk0tvrzdsq6sfwiphhpls.png\"><\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0430\u043a\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0435\u043d Newtonsoft.Json.Converters (\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u2014 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 DateTime \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 JSON \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430):  <\/p>\n<pre><code class=\"cs\">    class UnixTimeToDatetimeConverter : DateTimeConverterBase     {         private static readonly DateTime _epoch =              new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);           public override void WriteJson(JsonWriter writer, object value,              JsonSerializer serializer)         {             throw new NotImplementedException();         }          public override object ReadJson(JsonReader reader, Type objectType,              object existingValue, JsonSerializer serializer)         {             if (reader.Value == null)             {                 return null;             }             return _epoch.AddSeconds(Convert.ToDouble(reader.Value)).ToLocalTime();         }     } <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 Date \u043a\u043b\u0430\u0441\u0441\u0430 Order. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442 JsonConverter:  <\/p>\n<pre><code class=\"cs\">    class Order     {         [JsonProperty(\"trade_id\")]         public int OrderID { get; set; }         [JsonProperty(\"type\")]         public string Type { get; set; }         [JsonProperty(\"quantity\")]         public double Quantity { get; set; }         [JsonProperty(\"price\")]         public double Price { get; set; }         [JsonProperty(\"amount\")]         public double Amount { get; set; }         [JsonProperty(\"date\")]         [JsonConverter(typeof(UnixTimeToDatetimeConverter))]         public DateTime Date { get; set; }     } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Date \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f DateTime \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0434\u0435\u043b\u043e\u043a, \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 10 \u043c\u0438\u043d\u0443\u0442:  <\/p>\n<pre><code class=\"cs\">HttpClient httpClient = new HttpClient(); string request = \"https:\/\/api.exmo.com\/v1\/trades\/?pair=BTC_USD,ETH_USD\"; string responseBody = await     (await httpClient.GetAsync(request)).     EnsureSuccessStatusCode().     Content.ReadAsStringAsync();  Dictionary&lt;string, List&lt;Order&gt;&gt; PairList =      JsonConvert.DeserializeObject&lt;Dictionary&lt;string, List&lt;Order&gt;&gt;&gt;(responseBody);  List&lt;Order&gt; Last10minuts = new List&lt;Order&gt;(); foreach (var pair in PairList)     foreach (var order in pair.Value)         if (order.Date &gt; DateTime.Now.AddMinutes(-10))             Last10minuts.Add(order); <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">using System; using System.Threading.Tasks; using System.Collections.Generic; using System.Net.Http; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization;  namespace JSONObjects {     class Order      {         [JsonProperty(\"pair\")]         public string Pair { get; set; }         [JsonProperty(\"trade_id\")]         public int OrderID { get; set; }         [JsonProperty(\"type\")]         public string Type { get; set; }         [JsonProperty(\"quantity\")]         public double Quantity { get; set; }         [JsonProperty(\"price\")]         public double Price { get; set; }         [JsonProperty(\"amount\")]         public double Amount { get; set; }         [JsonProperty(\"date\")]         [JsonConverter(typeof(UnixTimeToDatetimeConverter))]         public DateTime Date { get; set; }     }     class UnixTimeToDatetimeConverter : DateTimeConverterBase     {         private static readonly DateTime _epoch =              new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);           public override void WriteJson(JsonWriter writer, object value,              JsonSerializer serializer)         {             throw new NotImplementedException();         }          public override object ReadJson(JsonReader reader, Type objectType,             object existingValue, JsonSerializer serializer)         {             if (reader.Value == null)             {                 return null;             }              return _epoch.AddSeconds(Convert.ToDouble(reader.Value)).ToLocalTime();         }       }     class Program     {         public static async Task Main(string[] args)         {             using HttpClient httpClient = new HttpClient();             string request = \"https:\/\/api.exmo.com\/v1\/trades\/?pair=BTC_USD,ETH_USD\";             string responseBody = await                 (await httpClient.GetAsync(request)).                 EnsureSuccessStatusCode().                 Content.ReadAsStringAsync();              Dictionary&lt;string, List&lt;Order&gt;&gt; PairList = JsonConvert.                 DeserializeObject&lt;Dictionary&lt;string, List&lt;Order&gt;&gt;&gt;(responseBody);              List&lt;Order&gt; Last10minuts = new List&lt;Order&gt;();             foreach (var pair in PairList)                 foreach (var order in pair.Value)                     if (order.Date &gt; DateTime.Now.AddMinutes(-10))                         Last10minuts.Add(order);          }     } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u041f\u043e\u0434\u043c\u0435\u043d\u0430 \u0438\u043c\u0435\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 JSON<\/h3>\n<p>  \u0420\u0430\u043d\u0435\u0435 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 trades \u0431\u0438\u0440\u0436\u0438. \u0414\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438:  <\/p>\n<pre><code class=\"cs\">public class BTCUSD {     public int trade_id { get; set; }     public string type { get; set; }     public string quantity { get; set; }     public string price { get; set; }     public string amount { get; set; }     public int date { get; set; } } <\/code><\/pre>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0438\u0440\u0436\u0438 user_open_orders \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:  <\/p>\n<pre><code class=\"cs\">public class BTCUSD {     public string order_id { get; set; }     public string created { get; set; }     public string type { get; set; }     public string pair { get; set; }     public string quantity { get; set; }     public string price { get; set; }     public string amount { get; set; } } <\/code><\/pre>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 Order, \u0447\u0442\u043e\u0431\u044b \u0432 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b trade, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b user_open_orders.<br \/>  \u041e\u0442\u043b\u0438\u0447\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 pair, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0432\u0430\u043b\u044e\u0442\u043d\u043e\u0439 \u043f\u0430\u0440\u044b, trade_id \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 order_id (\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430), \u0430 date \u0441\u0442\u0430\u043b\u0430 created \u0438 \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439. <br \/>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 order_id \u0438 created \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u044f OrderID \u0438 Date \u043a\u043b\u0430\u0441\u0441\u0430 Order. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043a\u043b\u0430\u0441\u0441 OrderDataContractResolver, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0434\u043c\u0435\u043d\u0430 \u0438\u043c\u0435\u043d \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 (\u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d System.Reflection \u0438 Newtonsoft.Json.Serialization):  <\/p>\n<pre><code class=\"cs\">  class OrderDataContractResolver : DefaultContractResolver     {         public static readonly OrderDataContractResolver Instance =              new OrderDataContractResolver();          protected override JsonProperty CreateProperty(MemberInfo member,              MemberSerialization memberSerialization)         {             var property = base.CreateProperty(member, memberSerialization);             if (property.DeclaringType == typeof(Order))             {                 if (property.PropertyName.Equals(\"trade_id\",                      StringComparison.OrdinalIgnoreCase))                 {                     property.PropertyName = \"order_id\";                 }                 if (property.PropertyName.Equals(\"date\",                      StringComparison.OrdinalIgnoreCase))                 {                     property.PropertyName = \"created\";                 }             }             return property;         }     } <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 DeserializeObject \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"cs\">Dictionary&lt;string, List&lt;Order&gt;&gt; PairList =      JsonConvert.DeserializeObject&lt;Dictionary&lt;string, List&lt;Order&gt;&gt;&gt;(responseBody,         new JsonSerializerSettings { ContractResolver =          OrderDataContractResolver.Instance }); <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u0442\u0430\u043a\u0430\u044f JSON \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 user_open_orders:  <\/p>\n<pre><code class=\"json\">{\"BTC_USD\":[{\"order_id\":\"4722868563\",\"created\":\"1577349229\",\"type\":\"sell\",\"pair\":\"BTC_USD\",\"quantity\":\"0.002\",\"price\":\"8362.2\",\"amount\":\"16.7244\"}]} <\/code><\/pre>\n<p>  \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 \u0442\u0430\u043a\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/35\/6-\/oa\/356-oattpssgl2dehracirilbtg.png\"><br \/>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0442\u0438\u043f \u043f\u043e\u043b\u044f OrderID \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 Order \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430 string.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">using System; using System.Threading.Tasks; using System.Collections.Generic; using System.Net.Http; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; using System.Reflection;  namespace JSONObjects {     class Order     {         [JsonProperty(\"pair\")]         public string Pair { get; set; }         [JsonProperty(\"trade_id\")]         public string OrderID { get; set; }         [JsonProperty(\"type\")]         public string Type { get; set; }         [JsonProperty(\"quantity\")]         public double Quantity { get; set; }         [JsonProperty(\"price\")]         public double Price { get; set; }         [JsonProperty(\"amount\")]         public double Amount { get; set; }         [JsonProperty(\"date\")]         [JsonConverter(typeof(UnixTimeToDatetimeConverter))]         public DateTime Date { get; set; }     }     class OrderDataContractResolver : DefaultContractResolver     {         public static readonly OrderDataContractResolver Instance =              new OrderDataContractResolver();          protected override JsonProperty CreateProperty(MemberInfo member,              MemberSerialization memberSerialization)         {             var property = base.CreateProperty(member, memberSerialization);             if (property.DeclaringType == typeof(Order))             {                 if (property.PropertyName.Equals(\"trade_id\",                      StringComparison.OrdinalIgnoreCase))                 {                     property.PropertyName = \"order_id\";                 }                 if (property.PropertyName.Equals(\"date\",                      StringComparison.OrdinalIgnoreCase))                 {                     property.PropertyName = \"created\";                 }             }             return property;         }     }     class UnixTimeToDatetimeConverter : DateTimeConverterBase     {         private static readonly DateTime _epoch =              new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);           public override void WriteJson(JsonWriter writer, object value,              JsonSerializer serializer)         {             throw new NotImplementedException();         }          public override object ReadJson(JsonReader reader, Type objectType,             object existingValue, JsonSerializer serializer)         {             if (reader.Value == null)             {                 return null;             }              return _epoch.AddSeconds(Convert.ToDouble(reader.Value)).ToLocalTime();         }     }     class Program     {         public static async Task Main(string[] args)         {             using HttpClient httpClient = new HttpClient();             string request = \"https:\/\/api.exmo.com\/v1\/trades\/?pair=BTC_USD,ETH_USD\";             string responseBody = await                 (await httpClient.GetAsync(request)).                 EnsureSuccessStatusCode().                 Content.ReadAsStringAsync();              Dictionary&lt;string, List&lt;Order&gt;&gt; PairList =                  new Dictionary&lt;string, List&lt;Order&gt;&gt;();             JObject jObject = JObject.Parse(responseBody);             foreach (var pair in jObject)             {                 List&lt;Order&gt; orders = new List&lt;Order&gt;();                 foreach (var order in pair.Value.ToObject&lt;List&lt;Order&gt;&gt;())                 {                     order.Pair = pair.Key;                     orders.Add(order);                 }                 PairList.Add(pair.Key, orders);             }               responseBody = \"{\\\"BTC_USD\\\":[{\\\"order_id\\\":\\\"4722868563\\\",\" +               \"\\\"created\\\":\\\"1577349229\\\",\\\"type\\\":\\\"sell\\\",\" +               \"\\\"pair\\\":\\\"BTC_USD\\\",\\\"quantity\\\":\\\"0.002\\\",\" +               \"\\\"price\\\":\\\"8362.2\\\",\\\"amount\\\":\\\"16.7244\\\"}]}\";             Dictionary&lt;string, List&lt;Order&gt;&gt; PairList1 =                 JsonConvert.DeserializeObject&lt;Dictionary&lt;string, List&lt;Order&gt;&gt;&gt;                 (responseBody, new JsonSerializerSettings { ContractResolver =                  OrderDataContractResolver.Instance });          }     } } }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b user_open_orders, \u043e\u0442\u0432\u0435\u0442 \u0441\u043e\u0434\u0435\u0436\u0438\u0442 \u043f\u043e\u043b\u0435 \u201cpair\u201d, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b trade \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0432\u0430\u043b\u044e\u0442\u043d\u043e\u0439 \u043f\u0430\u0440\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043a\u043b\u044e\u0447\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0435 Pair \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430:  <\/p>\n<pre><code class=\"cs\">foreach (var pair in PairList)     foreach (var order in pair.Value)         order.Pair = pair.Key; <\/code><\/pre>\n<p>  \u041b\u0438\u0431\u043e \u0436\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c JObject:  <\/p>\n<pre><code class=\"cs\">Dictionary&lt;string, List&lt;Order&gt;&gt; PairList = new Dictionary&lt;string, List&lt;Order&gt;&gt;(); JObject jObject = JObject.Parse(responseBody); foreach (var pair in jObject) {     List&lt;Order&gt; orders = new List&lt;Order&gt;();     foreach (var order in pair.Value.ToObject&lt;List&lt;Order&gt;&gt;())     {         order.Pair = pair.Key;         orders.Add(order);     }     PairList.Add(pair.Key, orders); } <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bq\/l0\/q0\/bql0q0xtvo06iesnfdskz80d_80.png\"><\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d() } } }t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>      <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/482042\/\"> https:\/\/habr.com\/ru\/post\/482042\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/482042\/\">\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u044b\u043b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 JSON \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043a \u0442\u0438\u043f\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0435\u043d newtonsoft.json.linq, \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u044f\u0437\u044b\u043a\u0430 C#. \u0412 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u043a \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0438\u0442\u0438\u043a\u0438, \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0439. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0443\u0447\u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/3l\/5k\/h7\/3l5kh7oqau8g7rjl5_urm3bcv-u.png\">  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-296444","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=296444"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296444\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=296444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=296444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=296444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}