c# - Using custom JsonConverter to customize list reading -
i'm using json.net , want deserialize json list :
[ { "name":"blabla", "price":"50" }, { "name":"blabla", "price":"50" }, ... ]
so i've done
list<priceitem> list = jsonconvert.deserializeobject<list<priceitem>>(json, new dictionnaryjsonconverter());
but want deserialize items names in line, basicly have function isnamevalid(string name)
if return true put item in list , if false rid of it.
i computation in second read need have perf on function.
i've tried custom jsonconverter don't know how write list readjson function
public class customjsonconverter : jsonconverter { public override bool canconvert(type objecttype) { if (objecttype == typeof(priceitem)) { return true; } else if (objecttype == typeof(list<priceitem>)) { return true; } throw new notimplementedexception(); } public override object readjson(jsonreader reader, type objecttype, object existingvalue, jsonserializer serializer) { object obj = new object(); if (objecttype == typeof(priceitem) ) { obj = new priceitem(); ((priceitem)obj).name = reader.readasstring(); ((priceitem)obj).price = reader.readasstring(); } else if (objecttype == typeof(list<priceitem>)) { // ????? } return obj; } public override void writejson(jsonwriter writer, object value, jsonserializer serializer) { throw new notimplementedexception(); }
to honest, i'm not sure gain using jsonconverter
here filtering. unless json absolutely huge , you're worried memory consumption, simplest way need deserialize list , filter after fact. can single line of code:
list<priceitem> list = jsonconvert.deserializeobject<list<priceitem>>(json) .where(item => isnamevalid(item.name)) .tolist();
if worried memory, see this answer, shows how deserialize json list incrementally stream , process each item 1 one.
Comments
Post a Comment