Json 反序列化为 double 类型
Json deserialization to double type
只能反序列化JSON为字符串类型吗?如果我使用 double 作为范围并希望我的 JSON 数据像圆形仪表一样指向该范围类型 double 怎么办?
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;
}
只能反序列化JSON为字符串类型吗?如果我使用 double 作为范围并希望我的 JSON 数据像圆形仪表一样指向该范围类型 double 怎么办?
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;
}