将 json 对象反序列化为 C# 对象

Deserlializing json object to C# object

我有 JSON 对象的响应,我需要将其反序列化为 C# 对象。

{
    "sku": "00300X123",
    "name": "Upxx Pipe (Subaru)",
    "partsfinder":{
    "lvl0":["2008","2011","2007","2001","2012","2007","2003","2013","2008","2004","2014","2009","2005","2004","2009","2005","2004","2010","2006","2009","2011","2007","2001","2012","2008","2003","2013","2008","2004","2014","2009","2005","2005","2010","2006","2005","2010","2006","2006","2015","2011","2007","2002","2012","2008","2003","2013","2009","2004","2014","2009","2005","2002","2010","2006","2006","2011","2012","2007","2011","2007","2002","2012","2008","2004","2013","2009","2004","2014","2009","2005","2003","2010","2006","2007"],"lvl1":["2008 > Subaru","2011 > Subaru","2007 > Subaru","2001 > Subaru","2012 > Subaru","2007 > Subaru","2003 > Subaru","2013 > Subaru","2008 > Subaru","2004 > Subaru","2014 > Subaru","2009 > Subaru","2005 > Subaru","2004 > Subaru","2009 > Subaru","2005 > Subaru","2004 > Subaru","2010 > Subaru","2006 > Subaru","2009 > Subaru","2011 > Subaru","2007 > Subaru","2001 > Subaru","2012 > Subaru","2008 > Subaru","2003 > Subaru","2013 > Subaru","2008 > Subaru","2004 > Subaru","2014 > Subaru","2009 > Subaru","2005 > Subaru","2005 > Subaru","2010 > Subaru","2006 > Subaru","2005 > Subaru","2010 > Subaru","2006 > Subaru","2006 > Subaru","2015 > Subaru","2011 > Subaru","2007 > Subaru","2002 > Subaru","2012 > Subaru","2008 > Subaru","2003 > Subaru","2013 > Subaru","2009 > Subaru","2004 > Subaru","2014 > Subaru","2009 > Subaru","2005 > Subaru","2002 > Subaru","2010 > Subaru","2006 > Subaru","2006 > Subaru","2011 > Subaru","2012 > Subaru","2007 > Subaru","2011 > Subaru","2007 > Subaru","2002 > Subaru","2012 > Subaru","2008 > Subaru","2004 > Subaru","2013 > Subaru","2009 > Subaru","2004 > Subaru","2014 > Subaru","2009 > Subaru","2005 > Subaru","2003 > Subaru","2010 > Subaru","2006 > Subaru","2007 > Subaru"],"lvl2":["2008 > Subaru > Outback (Gen2)","2011 > Subaru > WRX Sedan (GJ)","2007 > Subaru > Liberty Sedan GT Spec B (BL)","2001 > Subaru > WRX Sedan (GD)","2012 > Subaru > WRX Sedan (GJ)","2007 > Subaru > WRX Wagon (GG)","2003 > Subaru > Forester (SG)","2013 > Subaru > WRX Sedan (GJ)","2008 > Subaru > STi Hatch (GH)","2004 > Subaru > Liberty Sedan GT Spec B (BL)","2014 > Subaru > WRX Sedan (GJ)","2009 > Subaru > Liberty Wagon GT Spec B (BP)","2005 > Subaru > Forester (SG)","2004 > Subaru > STi Sedan (GD)","2009 > Subaru > WRX Sedan (GE)","2005 > Subaru > WRX Wagon (GG)","2004 > Subaru > Outback (Gen2)","2010 > Subaru > WRX Hatch (GH)","2006 > Subaru > STi Sedan (GD)","2009 > Subaru > Outback (Gen2)","2011 > Subaru > WRX Hatch (GP)","2007 > Subaru > Liberty Wagon GT Spec B (BP)","2001 > Subaru > WRX Wagon (GG)","2012 > Subaru > WRX Hatch (GP)","2008 > Subaru > Forester (SH)","2003 > Subaru > WRX Sedan (GD)","2013 > Subaru > WRX Hatch (GP)","2008 > Subaru > WRX Hatch (GH)","2004 > Subaru > Liberty Wagon GT Spec B (BP)","2014 > Subaru > WRX Hatch (GP)","2009 > Subaru > STi Hatch (GR)","2005 > Subaru > Liberty Sedan GT Spec B (BL)","2005 > Subaru > STi Sedan (GD)","2010 > Subaru > Forester (SH)","2006 > Subaru > Forester (SG)","2005 > Subaru > Outback (Gen2)","2010 > Subaru > WRX Sedan (GE)","2006 > Subaru > WRX Sedan (GD)","2006 > Subaru > WRX Wagon (GG)","2015 > Subaru > STi Sedan","2011 > Subaru > STi Sedan (GJ)","2007 > Subaru > STi Sedan (GD)","2002 > Subaru > WRX Sedan (GD)","2012 > Subaru > STi Sedan (GJ)","2008 > Subaru > Liberty Sedan GT Spec B (BL)","2003 > Subaru > WRX Wagon (GG)","2013 > Subaru > STi Sedan (GJ)","2009 > Subaru > Forester (SH)","2004 > Subaru > WRX Sedan (GD)","2014 > Subaru > STi Sedan (GJ)","2009 > Subaru > STi Sedan (GV)","2005 > Subaru > Liberty Wagon GT Spec B (BP)","2002 > Subaru > STi Sedan (GD)","2010 > Subaru > STi Hatch (GR)","2006 > Subaru > Liberty Sedan GT Spec B (BL)","2006 > Subaru > Outback (Gen2)","2011 > Subaru > Forester (SH)","2012 > Subaru > Forester (SH)","2007 > Subaru > Forester (SG)","2011 > Subaru > STi Hatch (GP)","2007 > Subaru > WRX Sedan (GD)","2002 > Subaru > WRX Wagon (GG)","2012 > Subaru > STi Hatch (GP)","2008 > Subaru > Liberty Wagon GT Spec B (BP)","2004 > Subaru > Forester (SG)","2013 > Subaru > STi Hatch (GP)","2009 > Subaru > Liberty Sedan GT Spec B (BL)","2004 > Subaru > WRX Wagon (GG)","2014 > Subaru > STi Hatch (GP)","2009 > Subaru > WRX Hatch (GH)","2005 > Subaru > WRX Sedan (GD)","2003 > Subaru > STi Sedan (GD)","2010 > Subaru > STi Sedan (GV)","2006 > Subaru > Liberty Wagon GT Spec B (BP)","2007 > Subaru > Outback (Gen2)"]
    }
},
{
    "sku": "00339980112",
    "name": "Twin Supertone",
    "partsfinder":{
    "lvl0":["Universal Parts"]
    }
}

然后我有这些类来存储值:

public class Item_Partsfinder
{
    public string sku { get; set; }
    public string name { get; set; }
    public List<Partsfinder> partsfinder { get; set; }
}

public class Partsfinder
{
    public List<string> lvl0 { get; set; }
}

这些是获取 json 和转换的代码:

string jobsUrl = string.Format("https://xxxxx/export/test/xxx.json");
var uri = new Uri(string.Format(jobsUrl, string.Empty));

try
{
     var response = client.GetAsync(uri, HttpCompletionOption.ResponseHeadersRead).Result;
     var responseData = response.Content.ReadAsStringAsync();
     responseData.Wait();

     if (responseData.IsCompleted)
     {
                    itemPartsfinder = JsonConvert.DeserializeObject<List<Item_Partsfinder>>(responseData.Result);
     }
 }
 catch (Exception e)
 {
     var me = e.Message;
 }

然后我有这个错误:

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[oRouter.Model.Wrapper.Partsfinder]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object. Path '[0].partsfinder.lvl0', line 8, position 7.

请帮我修正错误。非常感谢。

partsfinder 是对象,不是数组..

试试这个

public class Item_Partsfinder
{
    public string sku { get; set; }
    public string name { get; set; }
    public Partsfinder partsfinder { get; set; }
}

public class Partsfinder
{
   public List<string> lvl0 { get; set; }
}

https://xxxxx/export/test/xxx.json 必须 return 喜欢 that

并加上classWrapper

public class Wrapper  {
  public List<Item_Partsfinder> Items {get; set;}
}