簡體   English   中英

Json反序列化為double類型

[英]Json deserialization to double type

您只能將JSON反序列化為字符串類型嗎? 如果我使用double作為范圍,並希望我的JSON數據指向該范圍類型,例如圓形規,該怎么辦?

試圖收集的Json數據:

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

}

更新的代碼*

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


            }

        }
    }

首先,創建適當的類

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

然后解析JSON

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

現在,您將feild1用作雙打,可以使用它

編輯: 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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM