消费asp.net web.api json不起作用



我正在尝试消耗我的Web API,该Web API从我的ASP.NET MVC Web应用程序中返回JSON格式。由于我的JSON格式具有root节点(我填充OLEDB数据集的方式)。我不断遇到以下错误。

无法对当前的JSON对象(例如{"名称":" value"})进行挑选 进入类型的'system.collections.generic.list'1 [fileattributes]'因为 该类型需要一个JSON阵列(例如[1,2,3])才能进行挑选 正确。要解决此错误,要么将JSON更改为JSON数组 (例如[1,2,3])或更改供应类型,以使其正常 .NET类型(例如,不是像整数这样的原始类型,而不是集合 类型类似于数组或List<T>)可以从JSON中进行值得序列化的类型 目的。jsonobjectattribute也可以添加到强迫它的类型中 从JSON对象进行估算。路径" SearchData",第1行,位置 14。

这是代码示例

string Baseurl = "http://localhost:62602/";
client.BaseAddress = new Uri(Baseurl);
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage Res = await client.GetAsync("api/FileSearch/?searchTerm=" + searchTerm );
if (Res.IsSuccessStatusCode)
{
    var fsResponse = Res.Content.ReadAsStringAsync().Result;
    List<FileAttributes> fileAttribultes = JsonConvert.DeserializeObject<List<FileAttributes>>(fsResponse);
}

然后遵循一些想法,我使用JSON.ParseSelectToken删除根节点,但是这次List<FileAttributes>返回数据,但带有null值

JToken jtok = JObject.Parse(fsResponse).SelectToken("SearchData");
List<FileAttributes> fileAttribultes = JsonConvert.DeserializeObject<List<FileAttributes>>(fsResponse);

这是我的fileattributes class

public class FileAttributes
{
    public string Name { get; set; }
    public string Header { get; set; }
    public string Title { get; set; }
 }

我很感谢是否有人在使用根节点的JSON零件中检查了什么问题,而正确的方法是什么?

从邮递员输出中复制

{ "SearchData": [ { "SYSTEM.NAME": "FILE NAME 1" , "SYSTEM.HEADER": "HEADER 1", "SYSTEM.TITLE": "TITLE 1", }, { "SYSTEM.NAME": "FILE NAME 1" , "SYSTEM.HEADER": "HEADER 1", "SYSTEM.TITLE": "TITLE 1", }, { "SYSTEM.NAME": "FILE NAME 1" , "SYSTEM.HEADER": "HEADER 1", "SYSTEM.TITLE": "TITLE 1", }] }

基于JSON,需要更新对象模型才能匹配。还需要包括JsonProperty属性以使JSON键与类的属性匹配。

public class FileAttributes {
    [JsonProperty("SYSTEM.NAME")]
    public string Name { get; set; }
    [JsonProperty("SYSTEM.HEADER")]
    public string Header { get; set; }
    [JsonProperty("SYSTEM.TITLE")]
    public string Title { get; set; }
}
public class RootObject {
    public IList<FileAttributes> SearchData { get; set; }
}

然后将通话更新到服务

string Baseurl = "http://localhost:62602/";
client.BaseAddress = new Uri(Baseurl);
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.GetAsync("api/FileSearch/?searchTerm=" + searchTerm );
if (response.IsSuccessStatusCode) {
    var json = await response.Content.ReadAsStringAsync();
    RootObject result = JsonConvert.DeserializeObject<RootObject>(json);
    var fileAttribultes = result.SearchData; 
    //...
}

相关内容

  • 没有找到相关文章

最新更新