json.net Deserialise to array of objects c# -
i have poco class looks this:
public class item : asset { public int playlistid { get; set; } public int assetid { get; set; } public double duration { get; set; } public int order { get; set; } } and asset looks this:
public enum assettype { image = 1, video, website } public class asset { public int id { get; set; } public string name { get; set; } public string filename { get; set; } public assettype type { get; set; } public string createdbyid { get; set; } public string modifiedbyid { get; set; } [display(name="created by")] public string createdby { get; set; } [display(name="modified by")] public string modifiedby { get; set; } } and have json file looks this:
{ "items":[ { "playlistid":1, "type":2, "duration":19, "filename":"stream1_mpeg4.avi" }, { "playlistid":1, "type":2, "duration":21, "filename":"stream2_mpeg4.avi" } ] } and have code looks this:
public ilist<item> getall() { if (file.exists(itemspath)) { using (var fs = new filestream(itemspath, filemode.open)) using (var sr = new streamreader(fs)) { var text = sr.readtoend(); var array = jsonconvert.deserializeobject<item[]>(sr.readtoend()); return array.tolist(); } } else throw new filenotfoundexception("unable find playlist, please make sure " + itemspath + " exists."); } the text variable contains correct json string expect, array null, therefore array.tolist(); throws error. know doing wrong?
cheers in advance /r3plica
you're calling readtoend() twice, second time there's no more text read on stream:
var text = sr.readtoend(); var array = jsonconvert.deserializeobject<item[]>(sr.readtoend()); just replace second sr.readtoend() text , should work:
var array = jsonconvert.deserializeobject<item[]>(text); also, correctly pointed out @sachin, json represent object property called items array or list of item objects.
therefore, should pass through intermediate class shown in @sachin's answer, or alternatively using dictionary, this:
var dict = jsonconvert.deserializeobject<dictionary<string,item[]>>(text); var array = dict["items"];
Comments
Post a Comment