Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Wikipedia API反序列化JSON响应时出现问题_C#_.net_Json_Deserialization_Wikipedia - Fatal编程技术网

C# 从Wikipedia API反序列化JSON响应时出现问题

C# 从Wikipedia API反序列化JSON响应时出现问题,c#,.net,json,deserialization,wikipedia,C#,.net,Json,Deserialization,Wikipedia,我尝试使用Wikipedia搜索请求API,因此: *&format=json&generator=search&gsrnamespace=0&gsrlimit=100&gsrsearch=Simple谐波运动 然后尝试反序列化如下: WikiSearchResults R = s1.Deserialize<WikiSearchResults>(Json); 但我有一个例外: 没有为WikiSearchQuery[]类型定义无参数构造函数 我想我误解了JSON响应。有人能指出我做错

我尝试使用Wikipedia搜索请求API,因此:

*&format=json&generator=search&gsrnamespace=0&gsrlimit=100&gsrsearch=Simple谐波运动

然后尝试反序列化如下:

WikiSearchResults R = s1.Deserialize<WikiSearchResults>(Json);
但我有一个例外:

没有为WikiSearchQuery[]类型定义无参数构造函数


我想我误解了JSON响应。有人能指出我做错了什么吗?

反序列化可能存在多个问题

正如弗雷德里克在评论中提到的,你的课程是私人的。将它们公开应该可以修复您遇到的异常

此外,WikiSearchQuery只存在一次,不包含对象数组,但包含字典

这就是我现在看到的问题,所以这可能会起作用:

public class WikiSearchQuery{
     public Dictionary<string,WikiSearchPage> pages { get; set; }
}

public class WikiSearchPage{
     public int pageid { get; set; }
     public string title { get; set; }
}

public class WikiSearchResults{
     public WikiSearchQuery query { get; set; }
}
公共类WikiSearchQuery{
公共字典页{get;set;}
}
公共类WikiSearchPage{
public int pageid{get;set;}
公共字符串标题{get;set;}
}
公共类WikiSearchResults{
公共WikiSearchQuery查询{get;set;}
}

反序列化可能存在多个问题

正如弗雷德里克在评论中提到的,你的课程是私人的。将它们公开应该可以修复您遇到的异常

此外,WikiSearchQuery只存在一次,不包含对象数组,但包含字典

这就是我现在看到的问题,所以这可能会起作用:

public class WikiSearchQuery{
     public Dictionary<string,WikiSearchPage> pages { get; set; }
}

public class WikiSearchPage{
     public int pageid { get; set; }
     public string title { get; set; }
}

public class WikiSearchResults{
     public WikiSearchQuery query { get; set; }
}
公共类WikiSearchQuery{
公共字典页{get;set;}
}
公共类WikiSearchPage{
public int pageid{get;set;}
公共字符串标题{get;set;}
}
公共类WikiSearchResults{
公共WikiSearchQuery查询{get;set;}
}
使用(var-client=new-HttpClient())
{
var_reqMessage=新的HttpRequestMessage();
_reqMessage.Method=HttpMethod.Get;
_reqMessage.RequestUri=新Uri(“https://en.wikipedia.org/w/api.php?action=query&origin=*&format=json&generator=search&gsrnamespace=0&gsrlimit=100&gsrsearch=S“;
var response=client.sendsync(_reqMessage);
response.Wait();
var result=response.result;
var resultJson=result.Content.ReadAsStringAsync().result;
var tes=JsonConvert.DeserializeObject(resultJson);
}
型号:

public class WikiSearchQuery
{
  [JsonProperty("pages")]
  public Dictionary<object, WikiSearchPage> Pages { get; set; }
}

public class WikiSearchPage
{
  [JsonProperty("pageid")]
  public int Pageid { get; set; }
  [JsonProperty("title")]
  public string Title { get; set; }
}

public class WikiSearchResults
{
  [JsonProperty("query")]
  public WikiSearchQuery Query { get; set; }
}
公共类WikiSearchQuery
{
[JsonProperty(“页面”)]
公共字典页{get;set;}
}
公共类WikiSearchPage
{
[JsonProperty(“pageid”)]
public int Pageid{get;set;}
[JsonProperty(“所有权”)]
公共字符串标题{get;set;}
}
公共类WikiSearchResults
{
[JsonProperty(“查询”)]
公共WikiSearchQuery查询{get;set;}
}
使用(var-client=new-HttpClient())
{
var_reqMessage=新的HttpRequestMessage();
_reqMessage.Method=HttpMethod.Get;
_reqMessage.RequestUri=新Uri(“https://en.wikipedia.org/w/api.php?action=query&origin=*&format=json&generator=search&gsrnamespace=0&gsrlimit=100&gsrsearch=S“;
var response=client.sendsync(_reqMessage);
response.Wait();
var result=response.result;
var resultJson=result.Content.ReadAsStringAsync().result;
var tes=JsonConvert.DeserializeObject(resultJson);
}
型号:

public class WikiSearchQuery
{
  [JsonProperty("pages")]
  public Dictionary<object, WikiSearchPage> Pages { get; set; }
}

public class WikiSearchPage
{
  [JsonProperty("pageid")]
  public int Pageid { get; set; }
  [JsonProperty("title")]
  public string Title { get; set; }
}

public class WikiSearchResults
{
  [JsonProperty("query")]
  public WikiSearchQuery Query { get; set; }
}
公共类WikiSearchQuery
{
[JsonProperty(“页面”)]
公共字典页{get;set;}
}
公共类WikiSearchPage
{
[JsonProperty(“pageid”)]
public int Pageid{get;set;}
[JsonProperty(“所有权”)]
公共字符串标题{get;set;}
}
公共类WikiSearchResults
{
[JsonProperty(“查询”)]
公共WikiSearchQuery查询{get;set;}
}

json本身是什么样子的?在这里添加您的
json
数据。你的课可能有问题。一个不切实际的猜测说这是因为你的课是私人的。因此,它不能从另一个命名空间/程序集(如JSON反序列化程序)访问。如果将类重新声明为public,会发生什么情况?此外,模式似乎与我从该链接获得的JSON不匹配。JSON本身是什么样子的?请在此处添加
JSON
数据。你的课可能有问题。一个不切实际的猜测说这是因为你的课是私人的。因此,它不能从另一个命名空间/程序集(如JSON反序列化程序)访问。如果将类重新声明为public,会发生什么情况?而且,模式似乎与我从该链接获得的JSON不匹配。因此,我尝试将类公开,并且没有任何更改。这就是JSON看起来的样子:{“batchcomplete”:“continue”:{“gsroffset”:100,“continue”:“gsroffset | | |”},“query”:{“pages”:{“2443”:{“pageid”:2443,“ns”:0,“title”:“加速度”,“索引”:16},“19411913”:{“pageid”:19411913,“ns”:0,“title”:“analysis dynamics”,“index”:90},您是否也应用了我在公开类旁边所做的其他更改?错误消息是否保持不变?因此我尝试公开类,但没有更改。这是JSON看起来的样子:{“batchcomplete”:“,”continue:{“gsroffset”:100,“continue”:“gsroffset | |”},查询:{“pages”:{“2443”:{“pageid”:2443,“ns”:0,“title”:“加速度”,“索引”:16},“19411913”:{“pageid”:19411913,“ns”:0,“title”:“分析动力学”,“索引”:90},您是否也应用了我在公开类旁边所做的其他更改?错误消息是否保持不变?