2017-10-03 12 views
0

Können Sie JESON nur zu einem String-Typ deserialisieren? Was ist, wenn ich ein Double als Bereich verwende und möchte, dass meine JSON-Daten auf diesen Bereichstyp doppelt wie eine kreisförmige Anzeige zeigen?Jsons Deserialisierung zum Doppeltyp

im Json Daten versuchen zu sammeln:

{ 
"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

Sie ** ** json.net deserialisieren Sie auf jede Art verwenden können, wollen – styx

+0

Could Sie geben ein Beispiel dafür? Wenn ich ein Sfgauge-Steuerelement in Xanarin-Formen verwende, sind die Werte des Bereichs vom Typ int. Wenn ich jedoch den Zeigerwert an die JSON-Daten anhefte, bewegt sich der Zeiger nicht. –

+0

fügen Sie bitte ein Beispiel für eine JSON, die Sie bekommen – styx

Antwort

0

Erstellen Sie zunächst in geeigneter Klassen

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

dann die JSON parsen

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

jetzt haben Sie als Doppel feild1 und Sie können es

EDIT: eine Antwort mit 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

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


      } 

     } 
    }