рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде Newtonsoft.Json рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред рднрд╛рдЧ реи

рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдиреЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рддреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде JSON рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рддрдВрддреНрд░ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ newtonsoft.json.linq рдирд╛рдорд╕реНрдерд╛рди рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдбрд╛рд▓рд╛ рдЧрдпрд╛, рдФрд░ рдлрд┐рд░ C # рднрд╛рд╖рд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓реЛрдЪрдирд╛ рд╣реБрдИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдерд╛ред рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред



рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдмрд╛рд░реАрдХ рдЯреНрдпреВрдирд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ JSON рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкрд░ рд╕реНрд╡рдпрдВ рд▓реМрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, Parse () рдФрд░ ToObject <T> () рдЬреЛрдмрдЯ рдФрд░ JArray рд╡рд░реНрдЧреЛрдВ рдХреЗ рддрд░реАрдХреЗ newtonsoft.json.linq рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

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<string, List<Order>> dict = jObject.ToObject<Dictionary<string, List<Order>>>(); 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ JsonConvert рдХреНрд▓рд╛рд╕ рдореЗрдВ newtonsof.json рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ DeserializeObject <> рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реАрдзреЗ J # рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 Dictionary<string, List<Order>> JsonObject = JsonConvert.DeserializeObject<Dictionary<string, List<Order>>>(responseBody); List<string> Json_Array = JsonConvert.DeserializeObject<List<string>>(responseBody); 

рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЗрдЦ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ newtonsoft.json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ - Microsoft.AspNet.WebApi.Client рд▓рд╛рдЗрдмреНрд░реЗрд░реА (NuGet рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ) рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реАрдбрд╛рдпрд░реНрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 Dictionary<string, List<Order>> JsonObject = await (await httpClient.GetAsync(request)). EnsureSuccessStatusCode().Content. ReadAsAsync<Dictionary<string, List<Order>>>(); 

рдЯрд┐рдк рд▓рд╛рдпрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛


рд╣рдорд╛рд░реЗ рдСрд░реНрдбрд░ рд╡рд░реНрдЧ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ:

  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; } } 

рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдЗрд╕реЗ JSON C # рдХреНрд▓рд╛рд╕ рдЬреЗрдирд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рджреЛ рдмрд┐рдВрджреБ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╣рд▓рд╛ - рдЗрд╕ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рдЧреБрдг рдЦреЗрддреЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдСрд░реНрдбрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдСрд░реНрдбрд░рдЖрдИрдбреА рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ (рдФрд░ рдирд╣реАрдВ traid_id, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣реБрдЖ рдерд╛)ред рдПрдХ JSON рд╕рдВрд░рдЪрдирд╛ рддрддреНрд╡ рдФрд░ рдПрдХ рд╡рд░реНрдЧ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рдордирдорд╛рдиреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдкрд╣рд▓реЗ JsonProperty рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

  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; } } 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, "Trade_id" рддрддреНрд╡ рдХреЗ рдЕрдиреБрд░реВрдк рдореВрд▓реНрдп рдСрд░реНрдбрд░рд┐рдб рд╕рдВрдкрддреНрддрд┐, "рдкреНрд░рдХрд╛рд░" рдкреНрд░рдХрд╛рд░, рдЖрджрд┐ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред JsonProperty рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рдЬреА рдпрд╛ рд╕реНрдерд┐рд░ рд╕рдВрд╢реЛрдзрдХ рд╡рд╛рд▓реЗ рдЧреБрдгреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз / deserializing рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдРрд╕реЗ рдЧреБрдгреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рдореБрджреНрд░рд╛ рдЬреЛрдбрд╝реЗ BTC_USD рдФрд░ ETH_USD рдХреЗ рд▓рд┐рдП рд╕рднреА рдСрд░реНрдбрд░ рд▓реЗрдирджреЗрди рдХреА рд╕реВрдЪреА рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:

 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<string, List<Order>> PairList = JsonConvert.DeserializeObject<Dictionary<string, List<Order>>>(responseBody); List<int> IDs = new List<int>(); foreach (var pair in PairList) foreach (var order in pair.Value) IDs.Add(order.OrderID); 

рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рджреВрд╕рд░реА рдХрдард┐рдирд╛рдИ рджрд┐рдирд╛рдВрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реЛрдЧреАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, JSON C # рдХреНрд▓рд╛рд╕ рдЬреЗрдирд░реЗрдЯрд░ рдиреЗ "рддрд┐рдерд┐" рддрддреНрд╡ рдХреЛ рдПрдХ рдкреНрд░рдореБрдЦ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреА рджрд┐рдирд╛рдВрдХ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ - рджрд┐рдирд╛рдВрдХ рд╕рдордпред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдмрд╛рдж рдореЗрдВ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рджрд┐рдирд╛рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде newtonsof.json рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд▓реЗрдЦ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢, рдореЛрдЯреЗ рддреМрд░ рдкрд░ "рдбреЗрдЯрд╕рди рдЗрди рдЬреЗрдиреНрд╕рди - рдпрд╣ рдХрдард┐рди рд╣реИ" рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ JSON рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдордп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрдм JSON рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдлреЙрд░реНрдо рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдкреНрд░рд╛рд░реВрдк рддреАрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ: "Microsoft" (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ), "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ" ( рдпреВрдирд┐рдХреНрд╕ рд╕рдордп) рдФрд░ рдЖрдИрдПрд╕рдУ 8601 рдкреНрд░рдХрд╛рд░ред рдорд╛рдиреНрдп рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг:

 Dictionary<string, DateTime> d = new Dictionary<string, DateTime> { { "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)} 

рд╣рд╛рд▓рд╛рдВрдХрд┐, Exmo рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдПрдХреНрд╕рдЪреЗрдВрдЬ рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд┐рд╡рд░рдг рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рддрд╛рд░реАрдЦ рдФрд░ рд╕рдордп рдпреВрдирд┐рдХреНрд╕ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред рдФрд░, рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдСрд░реНрдбрд░ рдХреНрд▓рд╛рд╕ рдХреА рд╣рдорд╛рд░реА рдбреЗрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ JavaScriptDateTimeConverter () рдХреНрд▓рд╛рд╕ рд╕реЗ рдПрдХ рдлреЙрд░реНрдореЗрдЯ рдХрдиреНрд╡рд░реНрд╢рди рдлрдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рдХрд░, рд╣рдореЗрдВ рдбреЗрдЯ рдЯрд╛рдЗрдо рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рддрд╛рд░реАрдЦ рдбрд╛рд▓реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП:

  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; } } 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм рдЖрдк рдбреЗрдЯрд╛ рдХреЛ рдбреЗрдЯрдЯрд╛рдЗрдо рдХреЗ рдПрдХ рдЪрд░ рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж Newtonsoft.Json.JsonReaderException рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ JavaScriptDateTimeConverter рд╡рд░реНрдЧ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдбреЗрдЯрд╛ рдХреЛ DateTime рдкреНрд░рдХрд╛рд░ (рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред



рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд░реВрдкрд╛рдВрддрд░рдг рд╡рд░реНрдЧ рд▓рд┐рдЦреЗрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдХрдХреНрд╖рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдиреНрдпреВрдЯрдирд╕реЙрдлреНрдЯ.рдЬреЙрди.рдХреЙрдирд╡рд░реНрдЯрд░реНрд╕ рдиреЗрдорд╕реНрдкреЗрд╕ (рдкреВрд░реНрд╡рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рд╕рдордп рдореЗрдВ рдЬреЛрдВрд╕ рд╕реЗ рдЬреЛрдВрд╕ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ) рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред

  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(); } } 

рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдСрд░реНрдбрд░ рдХреНрд▓рд╛рд╕ рдХреА рджрд┐рдирд╛рдВрдХ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, JsonConverter рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

  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; } } 

рдЕрдм рд╣рдорд╛рд░реА рджрд┐рдирд╛рдВрдХ рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдХрд╛рд░ DateTime рдХреА рд╣реИ рдФрд░ рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд┐рдо 10 рдорд┐рдирдЯ рдореЗрдВ рд╕реМрджреЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 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<string, List<Order>> PairList = JsonConvert.DeserializeObject<Dictionary<string, List<Order>>>(responseBody); List<Order> Last10minuts = new List<Order>(); foreach (var pair in PairList) foreach (var order in pair.Value) if (order.Date > DateTime.Now.AddMinutes(-10)) Last10minuts.Add(order); 

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда
 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<string, List<Order>> PairList = JsonConvert. DeserializeObject<Dictionary<string, List<Order>>>(responseBody); List<Order> Last10minuts = new List<Order>(); foreach (var pair in PairList) foreach (var order in pair.Value) if (order.Date > DateTime.Now.AddMinutes(-10)) Last10minuts.Add(order); } } } 


JSON рддрддреНрд╡ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╣рдордиреЗ рдЯреНрд░реЗрдбреЛрдВ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЯреАрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрд╣ рдЖрджреЗрд╢ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдирд┐рдореНрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

 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; } } 

рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрдорд╛рдВрдб user_open_orders рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

 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; } } 

рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдСрд░реНрдбрд░ рдХреНрд▓рд╛рд╕ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рди рдХреЗрд╡рд▓ рд╡реНрдпрд╛рдкрд╛рд░ рдХрдорд╛рдВрдб рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХреЗ, рдмрд▓реНрдХрд┐ user_open_n рдХрдорд╛рди рдбреЗрдЯрд╛ рдХреЛ рднреА рдмрджрд▓ рд╕рдХреЗред

рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝рд╛ рддрддреНрд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореБрджреНрд░рд╛ рдЬреЛрдбрд╝реА рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ, Trade_id рдХреЛ order_id рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ рдЕрдм рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ), рдФрд░ рддрд╛рд░реАрдЦ рдмрди рдЧрдИ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреА рд╣реИред

рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдСрд░реНрдбрд░_рдПрдб рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдСрд░реНрдбрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдСрд░реНрдбрд░ рдФрд░ рджрд┐рдирд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдлрд╝реАрд▓реНрдб рдмрдирд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, OrderDataContractResolver рд╡рд░реНрдЧ рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХреЛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (System.Reflection рдФрд░ Newtonsoft.Json.Serialization рдирд╛рдорд╕реНрдерд╛рди рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВрдЧреЗ):

  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; } } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ DeserializeObject рд╡рд┐рдзрд┐ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 Dictionary<string, List<Order>> PairList = JsonConvert.DeserializeObject<Dictionary<string, List<Order>>>(responseBody, new JsonSerializerSettings { ContractResolver = OrderDataContractResolver.Instance }); 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕ рддрд░рд╣ рдХреА JSON рд╕рдВрд░рдЪрдирд╛ user_open_orders рдХрдорд╛рдВрдб рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ:

 {"BTC_USD":[{"order_id":"4722868563","created":"1577349229","type":"sell","pair":"BTC_USD","quantity":"0.002","price":"8362.2","amount":"16.7244"}]} 

рдЗрд╕ рддрд░рд╣ рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:



рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдСрд░реНрдбрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдСрд░реНрдбрд░ рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред

рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкреВрд░рд╛ рдкрд╛рда
 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<string, List<Order>> PairList = new Dictionary<string, List<Order>>(); JObject jObject = JObject.Parse(responseBody); foreach (var pair in jObject) { List<Order> orders = new List<Order>(); foreach (var order in pair.Value.ToObject<List<Order>>()) { 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<string, List<Order>> PairList1 = JsonConvert.DeserializeObject<Dictionary<string, List<Order>>> (responseBody, new JsonSerializerSettings { ContractResolver = OrderDataContractResolver.Instance }); } } } } 



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм user_open_orders рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрддреНрддрд░ рдореЗрдВ "рдЬреЛрдбрд╝реА" рдлрд╝реАрд▓реНрдб рд╣реЛрддреА рд╣реИ, рдЯреНрд░реЗрдб рдХрдорд╛рдВрдб рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрджреНрд░рд╛ рдЬреЛрдбрд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдореВрд▓реНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдкрд╛рд░реНрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднрд░рдирд╛ рд╣реЛрдЧрд╛:

 foreach (var pair in PairList) foreach (var order in pair.Value) order.Pair = pair.Key; 

рдпрд╛ рдЬреЛрдмрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 Dictionary<string, List<Order>> PairList = new Dictionary<string, List<Order>>(); JObject jObject = JObject.Parse(responseBody); foreach (var pair in jObject) { List<Order> orders = new List<Order>(); foreach (var order in pair.Value.ToObject<List<Order>>()) { order.Pair = pair.Key; orders.Add(order); } PairList.Add(pair.Key, orders); } 

рдЬреЛ рдЕрдВрддрддрдГ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:

Source: https://habr.com/ru/post/hi482042/


All Articles