简体   繁体   English

JsonConvert.DeserializeObject在.net中不起作用

[英]JsonConvert.DeserializeObject not working in .net

I am not getting JsonConvert.DeserializeObject to work for me. 我没有让JsonConvert.DeserializeObject为我工作。 I get the correct value in JSON from the service. 我从服务中获得了JSON中的正确值。 Not finding anything online for this, would appreciate a little help here :) 没有在网上找到任何东西,在这里会有点帮助:)

Here is my code: 这是我的代码:

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

This is the response JSON from the service: 这是来自服务的响应JSON:

{"results":[{"type":"MERCEDES BENZ - M (Svartur)","subType":"M","color":"Svartur","registryNumber":"GXS56","number":"GXS56","factoryNumber":"WDC1631131A539035","registeredAt":"23.09.2004","pollution":" g/km","weight":"2200 kg","status":"Í lagi","nextCheck":"01.06.2019"}]}

I am quite new to REST services so I believe that the problem is small....I am just not able to figure it out right now. 我是REST服务的新手,所以我相信这个问题很小......我现在无法理解它。

Your json has a root object that contains the list of your vehicles. 您的json有一个根对象,其中包含您的车辆列表。
You need to name the variable that holds your list with the name returned in the json. 您需要使用json中返回的名称命名保存列表的变量。 results 结果

public class VehicleResults
{
    // This should be named results
    public List<VehicleResponse> results {get;set;}
}

Now you can deserialize with 现在你可以用反序列化了

VehicleResults data = JsonConvert.DeserializeObject<VehicleResults>(json);
foreach(var vei in data.results)
   Console.WriteLine(vei.type);

You need to [JsonProperty] on every property in VehicleResponse 您需要在VehicleResponse中的每个属性上使用[JsonProperty]

Please add _reader.Close() at the end of the using 请在使用结束时添加_reader.Close()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM