=波波日志 > Asp.Net/C#/WCF > Json.NET DeserializeObject could not find member 'xxx' on object of type 'RuntimeType'=

Json.NET DeserializeObject could not find member 'xxx' on object of type 'RuntimeType'

  当使用json.net的方法DeserializeObject反序列化一个json格式的字符串生成对应的C#对象时,一定要注意JSON格式的字符串的属性部分一定要区分大小写,如果不区分大小写,就会出现“could not find member 'xxx' on object of type 'RuntimeType'”的错误。

  这个是因为低版本的json.net,如1.3,调用DeserializeObject时,如果json格式的字符串属性值和C#对象属性的大小写不匹配时,就会出现“could not find member 'xxx' on object of type 'RuntimeType'”的错误了。升级成高版本的JSON.NET,如4.0,属性部分不区分大小。

  但是要注意DeserializeObject/SerializeObject方法从 Newtonsoft.Json.JavaScriptConvert名字空间下面转换到了Newtonsoft.Json.JsonConvert名字空间下面。如果不注意,直接使用,会编译出错,找不到JavaScriptConvert名字空间。

详细示例代码参考下面的文章
JSON.NET使用示例

下面的示例注释的部分是错误的,没有区分大小写,导致编译出错
+展开
-C#
        //使用1.3版本的json.net,属性一定要注意大小写,要不会出现Could not find member 'firstName' on object of type 'RuntimeType'错误
        /*
         string strJson = "{\"firstName\":\"John\",\"lastName\":\"Doe\"}";//注意一定要区分属性部分的大小写
         employee em = (employee)Newtonsoft.Json.JavaScriptConvert.DeserializeObject(strJson, typeof(employee));
         context.Response.Write("JSON格式的字符串生成对应的类实体:" + em.FirstName + "---" + em.LastName);
         context.Response.Write("br/br/类实体序列化成JSON格式的字符串:" + Newtonsoft.Json.JavaScriptConvert.SerializeObject(em));*/


        string strJson = "{\"firstName\":\"John\",\"lastName\":\"Doe\"}";
        //使用新版本的json.net,如果4.0,json格式的字符串属性部分可以不区分大小写,不会出现Could not find member 'firstName' on object of type 'RuntimeType'错误
        employee em = (employee)Newtonsoft.Json.JsonConvert.DeserializeObject(strJson, typeof(employee));
        context.Response.Write("JSON格式的字符串生成对应的类实体:" + em.FirstName + "---" + em.LastName);
        //序列化时,会自动转换成对应的C#对象的属性,区分大小写
        context.Response.Write("<br/><br/>类实体序列化成JSON格式的字符串:" + Newtonsoft.Json.JsonConvert.SerializeObject(em));


类别:Asp.Net/C#/WCF 作者:波波 日期:2011-04-20 【评论:0】 
 
暂时没有评论!
发表留言
  • *昵称:
  • 头像:
  • 电子邮件: [留下您的邮件,方便管理员回复您。]
  • 个人网站: *验证码:
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载或引用的作品侵犯了您的权利,请通知我们,我们会及时删除!
Powered by showbo,©2012,桂ICP备05005887号 京公网安备1101055090