c# - Nullable Guid to Null during JSON Deserialization -
update: of answers below, able see error in code , fix problem.
i'm trying figure out why guid? being set null during deserialization. first saw when parentstepid set null in post of webapi. verified json has correct value parentstepid on client side. track down problem is, created jsonconverter. in jsonconverter can see json has correct values before conversion, after conversion parentstepid set null though has valid guid in json.
so causing or how can work around this?
on client before ajax call made , in jsonconverter, json looks like:
{ "parentstepid": "c9ddfd7e-d124-e511-922d-ecf4bb4dc732", "workflowstep": { "enabled": true, "title": "9", "persistent": true, "extendable": false, "id": "00000000-0000-0000-0000-000000000000", "removethisentity": false, "deletethisentity": false, "serializeforserver": true }, "order": 1, "id": "00000000-0000-0000-0000-000000000000", "removethisentity": false, "deletethisentity": false, "serializeforserver": true } here's readjson of converter:
public override object readjson(jsonreader reader, type objecttype, object existingvalue, jsonserializer serializer) { var jobject = jobject.load(reader); //parentstepid expected value here var tmpval = jobject == null ? string.empty : jobject.tostring(); //parentstepid set null during deserialization. var res = jsonconvert.deserializeobject<orderedworkflow_workflowstep>(tmpval); return res; } and orderedworkflow_workflowstep class:
public class orderedworkflow_workflowstep : tbdorderedentity { public guid? parentworkflowid { get; set; } public virtual workflowstep workflowstep { get; set; } public guid? workflowstepid { get; set; } }
that class not correctly map json provided.
there no workflowstepid (or parentworkflowid) in json - json.net not know how map fields , the properties retain default values. if had been non-nullable have been all-zero guids.
the various annotations can apply basic transformations - such using different field names should id , parentstepid, respectively. example:
public class orderedworkflow_workflowstep : tbdorderedentity { [jsonproperty("parentstepid")] public guid? parentworkflowid { get; set; } public virtual workflowstep workflowstep { get; set; } [jsonproperty("id")] public guid? workflowstepid { get; set; } }
Comments
Post a Comment