C# json字符串转object报错,求教大神怎么处理?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# json字符串转object报错,求教大神怎么处理?相关的知识,希望对你有一定的参考价值。

我是做android开发的,最近学习C#开发,和服务端netty交互数据遇到些问题:
dotnetty 接收到的json数据 Debug.WriteLine msg:
"\"platform\":\"C#\",\"action\":\"login\",\"userInfo\":\"user_id\":100014,\"user_name\":\"admin\",\"password\":\"123456\",\"company\":\"null\",\"status\":1"

debug断点 msg:
"\"\\\"platform\\\":\\\"C#\\\",\\\"action\\\":\\\"login\\\",\\\"userInfo\\\":\\\"user_id\\\":100014,\\\"user_name\\\":\\\"admin\\\",\\\"password\\\":\\\"123456\\\",\\\"company\\\":\\\"null\\\",\\\"status\\\":1\""
解析方式:
javascriptSerializer jss = new JavaScriptSerializer();
//SendData send = (SendData)jss.DeserializeObject(msg);
SendData sendData = JsonConvert.DeserializeObject<SendData>(msg);
//SendData sendData2 = (SendData)JsonConvert.DeserializeObject(msg);
实体类属性:
SendData :
public string platform get; set;
public string action get; set;
public UserInfo userInfo get; set;
UserInfo :
public int user_id get; set;
public string user_name get; set;
public string password get; set;
public int status get; set;
public string company get; set;
异常信息:
Newtonsoft.Json.JsonSerializationException
HResult=0x80131500
Message=Error converting value ""platform":"C#","action":"login","userInfo":"user_id":100014,"user_name":"admin","password":"123456","company":"null","status":1" to type '_485_modbus.entity.SendData'. Path '', line 1, position 160.
Source=Newtonsoft.Json
省略无用信息.........
内部异常 1:
ArgumentException: Could not cast or convert from System.String to _485_modbus.entity.SendData.

参考技术A 你的实体类不是poco类吧,也就是有一些额外属性
建议你重新定义纯粹的针对这个json格式的类,看看是否转换还失败
另外,system.text.json是微软官方的json库本回答被提问者采纳
参考技术B 最外围多了一层引号,去除最外围的引号后,还是字符串,所以转换错误了。追问

问题是我在java服务器和Android端都是ok的,C#端就出现这种问题,用过字符串替换,截取,转义等方式还是解决不了。

C# list<object>和json互转

[

"ID":"1",
"Page":"2",
"Name":"Jason"
,

"ID":"2",
"Age":"23",
"Class":"2",
"Hobby":"eating"

]
类似这样数据类型应该如何解析.
或者List<object>和json互转有什么好用的工具库吗?

private static JavaScriptSerializer jss = new JavaScriptSerializer();


///反序列化,S为反序列化的对象类,包含json的字段
S s = jss.Deserialize<S>(responseText);

///序列化为json字符串,obj为需要序列化的对象
string str = jss.Serialize(obj);


需要引用 System.Web.Extensions
即,项目-引用-右键-添加引用,搜索System.Web.Extensions即可,我只在net4.0,及以上用过
微软自己的类库

追问

你这个可以转json是没有问题,但是你看列表里的内容,是不一样的。
不是简单的把类序列化成json。
list转成json是没有问题,但是再转回来就不容易了.
json转成list类,object的类型是不确定的,这个不好转,是主要问题。

追答

对象里的字段在json下不存在时,转换回对象,那个字段值也为null,使用的时候判断下吧

参考技术A NUGET 上拉取 newtonsoft.json ,
微软自带的性能没这个好。MVC起。微软都是有这个第三方库
参考技术B JSON.parse j

JSON.stringify

用法网上很多追问

你写的什么?也不说用的类库,你觉得什么库都不引用,你这么写编译器不会报错吗?我也知道“百度上一搜一大把”我就是在其他地方没找到才在这里问的。

追答

json2.js 这是前台

com.fasterxml.jackson.dataformat
jackson-dataformat-xml
2.6.7

这是后台包

以上是关于C# json字符串转object报错,求教大神怎么处理?的主要内容,如果未能解决你的问题,请参考以下文章

json字符串怎转换成json对象?

求教大神,我新建的java webservice 从客户端传过来的xml格式字符串 怎么解析

C# list<object>和json互转

求教大神,update tb set a=a*10报错将 numeric 转换为数据类型 numeric 时出现算术溢出错误

js中,怎么把object转成string?

C#如何将OBJECT转换成数组