Дезерриализация объекта JSON в объект C # - PullRequest
0 голосов
/ 31 августа 2018

У меня есть этот ответ объекта 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;
 }

Тогда у меня есть эта ошибка:

Невозможно десериализовать текущий объект JSON (например, {"name": "value"}) в тип 'System.Collections.Generic.List`1 [oRouter.Model.Wrapper.Partsfinder]', поскольку для типа требуется массив JSON (например, [1,2,3]) для правильной десериализации. Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип так, чтобы это был нормальный тип .NET (например, не примитивный тип, например, целое число, а не тип коллекции, например, массив или список), которые можно десериализовать из объекта JSON. JsonObjectAttribute также можно добавить к типу, чтобы заставить его десериализоваться из объекта JSON. Путь '[0] .partsfinder.lvl0', строка 8, позиция 7.

Пожалуйста, помогите мне исправить ошибку. Большое вам спасибо.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

https://xxxxx/export/test/xxx.json должен возвращаться как , что

И добавить класс Wrapper

public class Wrapper  {
  public List<Item_Partsfinder> Items {get; set;}
}
0 голосов
/ 31 августа 2018

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