Я пытаюсь получить общее количество вопросов о stackoverflow для упражнений, которые я выполняю, и застрял в десериализации., где я ошибаюсь при десериализации
Я был бы признателен, если кто-то может сообщить мне, что мне нужно сделать, может быть, предоставить какой-то пример кода, который бы мне помог.
, когда я запускаю это в консоли я получаю ошибка «Была ошибку десериализации объекта типа. Обнаружен неожиданного характера», которая является направленным вниз треугольником ...
это то, что у меня есть до сих пор
using System;
using System.Threading.Tasks;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace cs_StackOverflowAPI
{
[DataContract(Namespace = "http://schemas.microsoft.com/search/local/ws/rest/v1")]
public class Question
{
[DataMember(Name = "question_id")]
public int Questions { get; set; }
}
[DataContract]
public class ResourceSet
{
[DataMember(Name = "estimatedTotal")]
public long EstimatedTotal { get; set; }
[DataMember(Name = "resources")]
public Question[] Resources { get; set; }
}
[DataContract]
public class Response
{
[DataMember(Name = "statusCode")]
public int StatusCode { get; set; }
[DataMember(Name = "statusDescription")]
public string StatusDescription { get; set; }
[DataMember(Name = "authenticationResultCode")]
public string AuthenticationResultCode { get; set; }
[DataMember(Name = "errorDetails")]
public string[] errorDetails { get; set; }
[DataMember(Name = "traceId")]
public string TraceId { get; set; }
[DataMember(Name = "resourceSets")]
public ResourceSet[] ResourceSets { get; set; }
}
class Program
{
public string serverUrl = "https://api.stackexchange.com/";
public HttpClient client = null;
static void Main(string[] args)
{
try
{
string noOfQuestions = CreateRequest("questions");
Response noOfQuestionsReponse = MakeRequest(noOfQuestions);
ProcessResponse(noOfQuestionsReponse);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.Read();
}
}
public static string CreateRequest(string queryString)
{
string UrlRequest = "https://api.stackexchange.com/2.2/" +
queryString +
"?&site=stackoverflow";
return (UrlRequest);
}
public static Response MakeRequest(string requestUrl)
{
try
{
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
if (response.StatusCode != HttpStatusCode.OK)
throw new Exception(String.Format(
"Server error (HTTP {0}: {1}).",
response.StatusCode,
response.StatusDescription));
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(Response));
object objResponse = jsonSerializer.ReadObject(response.GetResponseStream());
Response jsonResponse
= objResponse as Response;
return jsonResponse;
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return null;
}
}
static public void ProcessResponse(Response noOfQuestionsReponse)
{
// this is where the error occurs
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
public static long ToUnixTime(DateTime date)
{
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return Convert.ToInt64((date.ToUniversalTime() - epoch).TotalSeconds);
}
}
}
Рассматривались ли вы просто с помощью StacMan или другой существующей библиотеки? –
Я не знаю о SO api и никогда не встречал «направленный вниз треугольник ...», но я бы предложил вам использовать библиотеку NewtonSoft.Json для json de/serializations. –
https://api.stackexchange.com/2.2/questions?&site=stackoverflow ответ этого URL не совпадает со свойствами класса Response – Patel