如何使用数据合约取消天气API的变现

问题描述 投票:0回答:1

如何通过该Wather API与数据合约反序列化。

我应该使用什么,任何人都可以帮我吗?

我需要使用datacontract反序列化这是xml数据的天气api但我不知道该如何写两行代码来从wather api中读取对象

任何人有任何想法。

如果有需要请帮助。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using HtmlParserSharp.Core;
using Newtonsoft.Json;
using RestSharp;
using RestSharp.Deserializers;
class Program
{
    static void Main(string[] args)
    {

        var clientWeather = new RestClient("http://api.worldweatheronline.com/premium/v1/weather.ashx");
        var requestWeather = new RestRequest(Method.GET);
        requestWeather.AddParameter("key", "c37f984779f14beb9bf01943201104", ParameterType.QueryString);
        requestWeather.AddParameter("q", "Pristina", ParameterType.QueryString);
        requestWeather.AddParameter("format", "xml", ParameterType.QueryString);
        requestWeather.AddParameter("num_of_days", "5", ParameterType.QueryString);
        IRestResponse responseWeather = clientWeather.Execute(requestWeather);

        DataContractSerializer dcs = new DataContractSerializer(typeof(Request));
        dsc.ReadObject() // I dont know what to write to Deserializer this with 
    }

使用此句柄

[DataContract]
public class Request
{
    [DataMember]
    public string Type { get; set; }
    [DataMember]
    public string Query { get; set; }
}

[DataContract]
public class Current_condition
{
    [DataMember]
    public string Observation_time { get; set; }
    [DataMember]
    public string Temp_C { get; set; }
    [DataMember]
    public string Temp_F { get; set; }
    [DataMember]
    public string WeatherCode { get; set; }
    [DataMember]
    public string WeatherIconUrl { get; set; }
    [DataMember]
    public string WeatherDesc { get; set; }
    [DataMember]
    public string WindspeedMiles { get; set; }
    [DataMember]
    public string WindspeedKmph { get; set; }
    [DataMember]
    public string WinddirDegree { get; set; }
    [DataMember]
    public string Winddir16Point { get; set; }
    [DataMember]
    public string PrecipMM { get; set; }
    [DataMember]
    public string PrecipInches { get; set; }
    [DataMember]
    public string Humidity { get; set; }
    [DataMember]
    public string Visibility { get; set; }
    [DataMember]
    public string VisibilityMiles { get; set; }
    [DataMember]
    public string Pressure { get; set; }
    [DataMember]
    public string PressureInches { get; set; }
    [DataMember]
    public string Cloudcover { get; set; }
    [DataMember]
    public string FeelsLikeC { get; set; }
    [DataMember]
    public string FeelsLikeF { get; set; }
    [DataMember]
    public string UvIndex { get; set; }
}

[DataContract]
public class Astronomy
{
    [DataMember]
    public string Sunrise { get; set; }
    [DataMember]
    public string Sunset { get; set; }
    [DataMember]
    public string Moonrise { get; set; }
    [DataMember]
    public string Moonset { get; set; }
    [DataMember]
    public string Moon_phase { get; set; }
    [DataMember]
    public string Moon_illumination { get; set; }
}

[DataContract]
public class Hourly
{
    [DataMember]
    public string Time { get; set; }
    [DataMember]
    public string TempC { get; set; }
    [DataMember]
    public string TempF { get; set; }
    [DataMember]
    public string WindspeedMiles { get; set; }
    [DataMember]
    public string WindspeedKmph { get; set; }
    [DataMember]
    public string WinddirDegree { get; set; }
    [DataMember]
    public string Winddir16Point { get; set; }
    [DataMember]
    public string WeatherCode { get; set; }
    [DataMember]
    public string WeatherIconUrl { get; set; }
    [DataMember]
    public string WeatherDesc { get; set; }
    [DataMember]
    public string PrecipMM { get; set; }
    [DataMember]
    public string PrecipInches { get; set; }
    [DataMember]
    public string Humidity { get; set; }
    [DataMember]
    public string Visibility { get; set; }
    [DataMember]
    public string VisibilityMiles { get; set; }
    [DataMember]
    public string Pressure { get; set; }
    [DataMember]
    public string PressureInches { get; set; }
    [DataMember]
    public string Cloudcover { get; set; }
    [DataMember]
    public string HeatIndexC { get; set; }
    [DataMember]
    public string HeatIndexF { get; set; }
    [DataMember]
    public string DewPointC { get; set; }
    [DataMember]
    public string DewPointF { get; set; }
    [DataMember]
    public string WindChillC { get; set; }
    [DataMember]
    public string WindChillF { get; set; }
    [DataMember]
    public string WindGustMiles { get; set; }
    [DataMember]
    public string WindGustKmph { get; set; }
    [DataMember]
    public string FeelsLikeC { get; set; }
    [DataMember]
    public string FeelsLikeF { get; set; }
    [DataMember]
    public string Chanceofrain { get; set; }
    [DataMember]
    public string Chanceofremdry { get; set; }
    [DataMember]
    public string Chanceofwindy { get; set; }
    [DataMember]
    public string Chanceofovercast { get; set; }
    [DataMember]
    public string Chanceofsunshine { get; set; }
    [DataMember]
    public string Chanceoffrost { get; set; }
    [DataMember]
    public string Chanceofhightemp { get; set; }
    [DataMember]
    public string Chanceoffog { get; set; }
    [DataMember]
    public string Chanceofsnow { get; set; }
    [DataMember]
    public string Chanceofthunder { get; set; }
    [DataMember]
    public string UvIndex { get; set; }
}

[DataContract]
public class Weather
{
    [DataMember]
    public string Date { get; set; }
    [DataMember]
    public Astronomy Astronomy { get; set; }
    [DataMember]
    public string MaxtempC { get; set; }
    [DataMember]
    public string MaxtempF { get; set; }
    [DataMember]
    public string MintempC { get; set; }
    [DataMember]
    public string MintempF { get; set; }
    [DataMember]
    public string AvgtempC { get; set; }
    [DataMember]
    public string AvgtempF { get; set; }
    [DataMember]
    public string TotalSnow_cm { get; set; }
    [DataMember]
    public string SunHour { get; set; }
    [DataMember]
    public string UvIndex { get; set; }
    [DataMember]
    public List<Hourly> Hourly { get; set; }
}

[DataContract]
public class Month
{
    [DataMember]
    public string Index { get; set; }
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string AvgMinTemp { get; set; }
    [DataMember]
    public string AvgMinTemp_F { get; set; }
    [DataMember]
    public string AbsMaxTemp { get; set; }
    [DataMember]
    public string AbsMaxTemp_F { get; set; }
    [DataMember]
    public string AvgDailyRainfall { get; set; }
}

[DataContract]
public class ClimateAverages
{
    [DataMember]
    public List<Month> Month { get; set; }
}

[DataContract]
public class Data
{
    [DataMember]
    public Request Request { get; set; }
    [DataMember]
    public Current_condition Current_condition { get; set; }
    [DataMember]
    public List<Weather> Weather { get; set; }

    public ClimateAverages ClimateAverages { get; set; }
}
c# datacontract
1个回答
0
投票

这里有几个建议

我相信您的typeof必须是Data,因为这是您引用其他所有内容的类型。

DataContractSerializer dcs = new DataContractSerializer(typeof(Data));
Data ReadData = (Data)dcs.ReadObject();

ReadObject接受一些不同的参数...

ReadObject(Stream)ReadObject(XmlReader)ReadObject(XmlDictionaryReader)

要使用它,您需要转换

似乎您可能必须使用正确的大小写来命名类,与API返回的名称相同

[DataContract(Name = "data", Namespace = "")]
public class Data

这里是文档:https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.datacontractserializer?view=netframework-4.8

© www.soinside.com 2019 - 2024. All rights reserved.