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));


加支付宝好友偷能量挖...


原创文章,转载请注明出处:Json.NET DeserializeObject could not find member 'xxx' on object of type 'RuntimeType'

评论(0)Web开发网
阅读(957)喜欢(0)Asp.Net/C#/WCF