C# JsonConvert.DeserializeObject在.net中不工作
我不能让C# JsonConvert.DeserializeObject在.net中不工作,c#,asp.net,json,json.net,C#,Asp.net,Json,Json.net,我不能让JsonConvert.DeserializeObject为我工作。 我从服务中获得正确的JSON值。在网上找不到任何相关信息,请在此提供帮助:) 这是我的密码: public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { } protected void tbPlate_OnServerChange(object sende
JsonConvert.DeserializeObject
为我工作。
我从服务中获得正确的JSON值。在网上找不到任何相关信息,请在此提供帮助:)
这是我的密码:
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void tbPlate_OnServerChange(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(tbPlate.Text))
{
var _res = Responses(tbPlate.Text);
if (_res.Vehicles != null)
{
lblTestText.Text = _res.Vehicles.FirstOrDefault(r => r.regNr == tbPlate.Text)?.ToString();
}
else
{
lblTestText.Text = "No vehicle data";
}
}
}
private static VehicleResults Responses(string regNr)
{
var _jSon = "";
var _url = @"http://apis.is/car";
var _res = new VehicleResults();
var _request = (HttpWebRequest)WebRequest.Create($"{_url}?number={regNr}");
var _response = _request.GetResponse();
using (var _responseStream = _response.GetResponseStream())
{
var _reader = new StreamReader(_responseStream, Encoding.UTF8);
_jSon = _reader.ReadToEnd();
}
_res = JsonConvert.DeserializeObject<VehicleResults>(_jSon);
return _res;
}
}
public class VehicleResponse
{
[JsonProperty("registryNumber")]
public string regNr { get; set; }
public string number { get; set; }
public string factoryNumber { get; set; }
public string type { get; set; }
public string subType { get; set; }
public string color { get; set; }
public string registeredAt { get; set; }
public string status { get; set; }
public string nextCheck { get; set; }
public string pollution { get; set; }
public string weight { get; set; }
}
public class VehicleResults
{
public List<VehicleResponse> Vehicles { get; set; }
}
我对REST服务很陌生,所以我认为问题很小……我现在无法解决 您需要在VehiclerResponse中的每个属性上设置[JsonProperty]
请在末尾添加_reader.Close(),使用您的json有一个包含车辆列表的根对象。
您需要使用json中返回的名称命名保存列表的变量。结果
公共类车辆结果
{
//这应该被命名为结果
公共列表结果{get;set;}
}
现在您可以使用
VehicleResults data = JsonConvert.DeserializeObject<VehicleResults>(json);
foreach(var vei in data.results)
Console.WriteLine(vei.type);
VehiclerResults data=JsonConvert.DeserializeObject(json);
foreach(data.results中的var vei)
控制台写入线(vei.type);
如果没有您尝试反序列化的json数据样本,我们如何帮助您?{“结果”:[{“类型”:“梅赛德斯-奔驰-M(Svartur)”,“子类型”:“M”,“颜色”:“Svartur”,“注册号”:“GXS56”,“编号”:“GXS56”,“工厂号”:“WDC1631131A539035”,“注册号”:“23.09.2004”,“污染”:“g/km”,“重量”:“2200 kg”,“状态”:“拉吉”,“耐克”:“01.06.2019”}]}这是来自服务的JSON响应。作为重命名的替代方案,可以将车辆属性与[JsonProperty(“结果”)]
@Zenilogix是正确的这是解决方案。。车辆的命名。公共类车辆结果{[JsonProperty(“结果”)]公共列表车辆{get;set;}}[JsonProperty]不需要用于属性名称,但属性名称的典型约定是它们以大写字母开头,例如“FactoryNumber”,而不是“FactoryNumber”。如果遵循此约定,则需要[JsonProperty],例如[JsonProperty(“factoryNumber”)],以便反序列化程序进行正确匹配。我知道这一点,我只是在测试它是否正常工作。如您所见,我已经根据JSON名称命名了属性。
public class VehicleResults
{
// This should be named results
public List<VehicleResponse> results {get;set;}
}
VehicleResults data = JsonConvert.DeserializeObject<VehicleResults>(json);
foreach(var vei in data.results)
Console.WriteLine(vei.type);