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);