2017-10-03 10 views
0

Est-il possible de désérialiser JSON en type de chaîne? Que se passe-t-il si j'utilise un double comme plage et que mes données JSON pointent sur ce type de plage double comme une jauge circulaire?Désérialisation de JSON en double-type

données JSON im essayant de recueillir:

{ 
"channel": 
    { 
     "id":301726, 
     "name":"Testing ESP8266", 
     "description":"Water meter pulse count", 
     "latitude":"0.0", 
     "longitude":"0.0", 
     "field1":"Pulse", 
     "created_at":"2017-07-12T12:19:38Z", 
     "updated_at":"2017-1003T06:14:29Z", 
     "elevation":"54", 
     "last_entry_id":531 
    }, 
"feeds": [ 
    { 
     "created_at":"2017-1002T21:56:57Z", 
     "entry_id":432, 
     "field1":"16.00" }, 
    { 
     "created_at":"2017-1002T21:57:17Z", 
     "entry_id":433, 
     "field1":"16.00" } 
] 

} 
+0

vous pouvez utiliser ** json.net ** désérialiser à tout type que vous voulez – styx

+0

pourrait vous donnez un exemple de cela? Lorsque j'utilise un contrôle sfgauge dans des formes xanarin, les valeurs de plage sont de type int, mais lorsque je lie la valeur de pointeur aux données json, le pointeur ne bouge pas. –

+0

s'il vous plaît ajouter un exemple d'un JSON que vous obtenez – styx

Répondre

0

D'abord, créer des classes convenablement

public class Channel 
    { 
     public int id { get; set; } 
     public string name { get; set; } 

     // and so on 

    } 
    public class Feeds 
    { 
     public DateTime created_at { get; set; } 
     public int entry_id { get; set; } 
     public double field1 { get; set; } 
    } 

alors le JSON parse

public static void parseJson() 
    { 
     using (WebClient wc = new WebClient()) 
     { 
      var json = wc.DownloadString(@"https://thingspeak.com/channels/301726/field/1.json"); 
      JObject obj = JObject.Parse(json); 
      foreach (var feedObj in obj["feeds"]) 
      { 
       Feeds feed = JsonConvert.DeserializeObject<Feeds>(feedObj .ToString()); 
       double feild1 = feed.field1; 
      } 
     } 
    } 

maintenant vous avez feild1 en double et vous pouvez l'utiliser

EDIT: une réponse avec HttpClient

static HttpClient _client = new HttpClient(); 

public static async Task<Feeds> getJson() 
    { 
     using (var response = await _client.GetAsync("https://thingspeak.com/channels/301726/field/1.json")) 
     { 
      if (response.IsSuccessStatusCode) { 

       var json = await response.Content.ReadAsStringAsync(); 
       JObject obj = JObject.Parse(json); 
       Feeds feed = null; 
       foreach (var feedObj in obj["feeds"]) 
       { 
        feed = JsonConvert.DeserializeObject<Feeds>(feedObj.ToString()); 
        double feild1 = feed.field1; 
       } 
       return feed; 
      } 
     } 

     return null; 
    } 
0

Mise à jour CODE *

using System.Net.Http; 
using Newtonsoft.Json; 
using Xamarin.Forms; 
using System.Collections.ObjectModel; 
using Syncfusion.SfGauge.XForms; 
using System.Collections; 
using System.Linq; 
using System.Linq.Expressions; 
using System.Text; 
using System.Threading.Tasks; 
using Newtonsoft.Json.Linq; 
using System; 
using System.Net; 





    namespace Drip 
    { 


     public partial class Guage : ContentPage 
     { 
      private const string Url = "https://thingspeak.com/channels/301726/field/1.json"; 
      private HttpClient _client = new HttpClient(); 


      private ObservableCollection<Feed> _data2; 


      //SfChart chart; 
      //LineSeries series; 

      public static void parseJson() 
      { 
       using (System.Net.WebClient wc = new System.Net.WebClient()) 
       { 
        var json = wc.DownloadString(@"https://thingspeak.com/channels/301726/field/1.json"); 
        JObject obj = JObject.Parse(json); 
        foreach (var feedObj in obj["feeds"]) 
        { 
         Feed feed = JsonConvert.DeserializeObject<Feed>(feedObj.ToString()); 
         double field1 = feed.Field1; 
        } 
       } 
      } 


      SfCircularGauge circular; 
      NeedlePointer needlePointer; 

      public Guage() 
      { 
       InitializeComponent(); 

       circular = new SfCircularGauge(); 
       circular.VerticalOptions = LayoutOptions.FillAndExpand; 
       circular.BackgroundColor = Color.Black; 

       Header header = new Header(); 
       header.Text = "Water Meter"; 
       header.TextSize = 20; 
       header.Position = new Point(0.50, 0.7); 
       header.ForegroundColor = Color.Gray; 
       circular.Headers.Add(header); 

       ObservableCollection<Scale> scales = new ObservableCollection<Scale>(); 
       Scale scale = new Scale(); 
       scale.LabelPostfix = "Litres"; 
       scale.StartValue = 0; 
       scale.EndValue = 100; 
       scale.Interval = 10; 
       scale.StartAngle = 135; 
       scale.SweepAngle = 270; 
       scale.RimThickness = 20; 
       scale.RimColor = Color.White; 
       scale.MinorTicksPerInterval = 0; 
       scales.Add(scale); 

       Range range = new Range(); 
       range.StartValue = 80; 
       range.EndValue = 100; 
       range.Color = Color.DarkRed; 
       range.Thickness = 10; 
       scale.Ranges.Add(range); 
       circular.Scales = scales; 


       ObservableCollection<NeedlePointer> needle = new ObservableCollection<NeedlePointer>(); 
       needlePointer = new NeedlePointer(); 
       needlePointer.Color = Color.Gray; 
       needlePointer.KnobColor = Color.Red; 
       needlePointer.Thickness = 5; 
       needlePointer.KnobRadius = 20; 
       needlePointer.LengthFactor = 0.8; 
       needlePointer.Value = 37; 

       //needlePointer.SetBinding(NeedlePointer.ValueProperty, "Field1"); 
       //this.BindingContext = new Feed(); 
       needlePointer.EnableAnimation = true; 
       scale.Pointers.Add(needlePointer); 
       needlePointer.Value = 37; 

       this.BindingContext = _data2[0]; 
       needlePointer.SetBinding(Pointer.ValueProperty, "field1"); 

       Content = circular; 
      } 

      protected override async void OnAppearing() 
      { 
       var content = await _client.GetStringAsync(Url); 
       var data = JsonConvert.DeserializeObject<RootObject>(content); 
       _data2 = new ObservableCollection<Feed>(data.Feeds); 

       base.OnAppearing(); 


      } 

     } 
    }