【问题标题】:C#- Need to access JSON Data values from my Dynamic objectC#- 需要从我的动态对象访问 JSON 数据值
【发布时间】:2020-09-17 22:31:50
【问题描述】:

我有一个json数据如下-

{
    "request": {
        "type": "",
        "query": "",
        "language": "en",
        "unit": "m"
    },
    "location": {
        "name": "",
        "country": "",
        "region": "",
        "lat": "",
        "lon": "",
        "timezone_id": "Asia/Kolkata",
        "localtime": "2020-05-29 23:30",
        "localtime_epoch": 1590795000,
        "utc_offset": "5.50"
    },
    "current": {
        "observation_time": "06:00 PM",
        "temperature": 40,
        "weather_code": 116,
        "weather_icons": [
            ""
        ],
        "weather_descriptions": [
            "Partly cloudy"
        ],
        "wind_speed": 9,
        "wind_degree": 230,
        "wind_dir": "SW",
        "pressure": 1006,
        "precip": 0,
        "humidity": 26,
        "cloudcover": 25,
        "feelslike": 42,
        "uv_index": 1,
        "visibility": 6,
        "is_day": "no"
    },
    "forecast": {
        "2020-05-28": {
            "date": "2020-05-28",
            "date_epoch": 1590624000,
            "astro": {
                "sunrise": "05:41 AM",
                "sunset": "06:46 PM",
                "moonrise": "10:29 AM",
                "moonset": "11:48 PM",
                "moon_phase": "First Quarter",
                "moon_illumination": 39
            },
            "mintemp": 32,
            "maxtemp": 44,
            "avgtemp": 38,
            "totalsnow": 0,
            "sunhour": 13.1,
            "uv_index": 9
        }
    }
}

前三个节点(“请求”,“位置”,“当前”)正确绑定,但用于“预测”,因为第一个节点是日期时间。我是这样写的-

var dataObjects = JsonConvert.DeserializeObject<Location_Weather.Weather>(customerJsonString);                   
var dataObjects23 = JsonConvert.DeserializeObject<Dictionary<string, dynamic>> (customerJsonString);
dynamic forecast_details = dataObjects23["forecast"];

这是我的模特->

public class New_Location_Weather
    {

        [JsonProperty("request")]
        public Request Request { get; set; }

        [JsonProperty("location")]
        public Location Location { get; set; }

        [JsonProperty("current")]
        public Current Current { get; set; }

        [JsonProperty("forecast")]
        public Forecast Forecast { get; set; }
    }

    public partial class Current
    {
        [JsonProperty("observation_time")]
        public string ObservationTime { get; set; }

        [JsonProperty("temperature")]
        public long Temperature { get; set; }

        [JsonProperty("weather_code")]
        public long WeatherCode { get; set; }

        [JsonProperty("weather_icons")]
        public Uri[] WeatherIcons { get; set; }

        [JsonProperty("weather_descriptions")]
        public string[] WeatherDescriptions { get; set; }

        [JsonProperty("wind_speed")]
        public long WindSpeed { get; set; }

        [JsonProperty("wind_degree")]
        public long WindDegree { get; set; }

        [JsonProperty("wind_dir")]
        public string WindDir { get; set; }

        [JsonProperty("pressure")]
        public long Pressure { get; set; }

        [JsonProperty("precip")]
        public long Precip { get; set; }

        [JsonProperty("humidity")]
        public long Humidity { get; set; }

        [JsonProperty("cloudcover")]
        public long Cloudcover { get; set; }

        [JsonProperty("feelslike")]
        public long Feelslike { get; set; }

        [JsonProperty("uv_index")]
        public long UvIndex { get; set; }

        [JsonProperty("visibility")]
        public long Visibility { get; set; }

        [JsonProperty("is_day")]
        public string IsDay { get; set; }
    }

    public partial class Forecast
    {
        [JsonProperty("2020-05-28")]
        public The20200528 The20200528 { get; set; }
    }

    public partial class The20200528
    {
        [JsonProperty("date")]
        public DateTimeOffset Date { get; set; }

        [JsonProperty("date_epoch")]
        public long DateEpoch { get; set; }

        [JsonProperty("astro")]
        public Astro Astro { get; set; }

        [JsonProperty("mintemp")]
        public long Mintemp { get; set; }

        [JsonProperty("maxtemp")]
        public long Maxtemp { get; set; }

        [JsonProperty("avgtemp")]
        public long Avgtemp { get; set; }

        [JsonProperty("totalsnow")]
        public long Totalsnow { get; set; }

        [JsonProperty("sunhour")]
        public double Sunhour { get; set; }

        [JsonProperty("uv_index")]
        public long UvIndex { get; set; }
    }

    public partial class Astro
    {
        [JsonProperty("sunrise")]
        public string Sunrise { get; set; }

        [JsonProperty("sunset")]
        public string Sunset { get; set; }

        [JsonProperty("moonrise")]
        public string Moonrise { get; set; }

        [JsonProperty("moonset")]
        public string Moonset { get; set; }

        [JsonProperty("moon_phase")]
        public string MoonPhase { get; set; }

        [JsonProperty("moon_illumination")]
        public long MoonIllumination { get; set; }
    }

    public partial class Location
    {
        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("country")]
        public string Country { get; set; }

        [JsonProperty("region")]
        public string Region { get; set; }

        [JsonProperty("lat")]
        public string Lat { get; set; }

        [JsonProperty("lon")]
        public string Lon { get; set; }

        [JsonProperty("timezone_id")]
        public string TimezoneId { get; set; }

        [JsonProperty("localtime")]
        public string Localtime { get; set; }

        [JsonProperty("localtime_epoch")]
        public long LocaltimeEpoch { get; set; }

        [JsonProperty("utc_offset")]
        public string UtcOffset { get; set; }
    }

    public partial class Request
    {
        [JsonProperty("type")]
        public string Type { get; set; }

        [JsonProperty("query")]
        public string Query { get; set; }

        [JsonProperty("language")]
        public string Language { get; set; }

        [JsonProperty("unit")]
        public string Unit { get; set; }
    }

现在的问题是我无法获取这些值。 我需要一些关于如何将这个值从 forecast_details 动态对象获取到我的 C# 代码中的指导。 下面是我需要在我的 c# 代码中访问它们的值的屏幕截图

在调试动态对象时,我在结果视图中找到了这些值。但我不确定如何在我的 c# 代码中访问这些值。

请告诉我如何从我的 C# 动态对象(forecast_details)中获取这些值。

【问题讨论】:

标签: c# json dynamic json.net asp.net-core-mvc


【解决方案1】:

看看这个问题,有两个答案可以帮到你。

How to add properties at runtime to JSON (C#)

您可以将 forecast json 解析为 JObject,并使用 foreach 从中获取所有值。

【讨论】:

  • 这不是我正在寻找的解决方案。但是得到我想要的解决方案真的很有帮助。
【解决方案2】:

这是我想出来的。希望对其他人有所帮助。

JObject obj = JObject.Parse(customerJsonString);
var forecast_details = obj.SelectToken("forecast").Children().OfType<JProperty>()
                                    .ToDictionary(p => p.Name, p => new
                                    {
                                        MaxTemp = (int)p.First()["maxtemp"],
                                        MinTemp = (int)p.First()["mintemp"]
                                    });
if(forecast_details.Count>0)
{
  int max_temp = forecast_details.Values.Select(x => x.MaxTemp).FirstOrDefault();
  int min_temp = forecast_details.Values.Select(x => x.MinTemp).FirstOrDefault();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    相关资源
    最近更新 更多