c# 反序列化 Json 字符串
Posted
技术标签:
【中文标题】c# 反序列化 Json 字符串【英文标题】:c# Deserialize Json String 【发布时间】:2021-09-02 17:37:04 【问题描述】:我是 REST 新手(从 SOAP 迁移)。我正在尝试将我得到的 JSON 字符串反序列化为 REST API 调用。
这是 json 字符串:
"message": "SUCCESS",
"result": "\"code\":\"610a187f80e24542bd5342d93c810a04\",\"rtime\":\"2021-06-17 19:40:03\",\"data\":\"08000002=2021-06-17 19:42:06\",\"ref_code\":\"\",\"stime\":\"2021-06-17 19:40:03\",\"source\":\"inhe-iot-crw_192_168_0_201_7021\",\"cycle\":0,\"operator\":\"ADMIN\",\"head\":\"inhe-ami-center/51ad33de59bb44dda693ec9811cec826\",\"result\":\"S\",\"times\":0,\"dev\":\"ptct\":\"1/1|1/1\",\"svn_type\":\"791f88ae4392a682eb74\",\"con\":\"\",\"scheme\":\"DLMS_WRAPPER_645\",\"svn_no\":12,\"id\":\"00036178fedf95aa8b68\",\"addr\":\"037222663645\",\"op_content\":\"037222663645||0\",\"ptime\":\"2021-06-17 19:40:03\",\"op_times\":\"0\",\"module_type\":\"001\",\"ip\":\"\",\"params\":\"\",\"priority\":9,\"packet\":\"S:0001000100010018E6000508AAA4C5DD68453666227203681104D3343337CE16,R:FEFEFEFE6845366622720368910BD334333733395D464439482916\",\"cmd_type\":\"R-READ\",\"field\":\"08000002\",\"expire\":10,\"etime\":\"2021-06-17 19:40:04\",\"data_ptct\":\"08000002=2021-06-17 19:42:06\"",
"code": 0,
"sign": "d488e1e531837929faeac2518c1659e6",
"timestamp": 1623969605496
我需要 rtime 字段的值。
这是我的代码:
var json_serializer = new javascriptSerializer();
var routes_list = (IDictionary<string, object>)json_serializer.DeserializeObject(AMI_GetResult.GetResult(data));
return string.Concat(routes_list["rtime"]);
我收到此错误:
System.Collections.Generic.KeyNotFoundException
我知道在解析中找不到 rtime,我的问题是:
如何获取 rtime 的时间戳值?
感谢您的帮助。
【问题讨论】:
你能编辑你的问题来格式化你的 JSON 吗?我尝试编辑它,但所有的编码都压倒了我的手工编辑技能。由于它是这样编码的,我可以通过我编写的“格式化此 JSON”工具来运行它。你从哪里得到这个,调试器?不要那样做,而是使用调试器中的“文本可视化器”。在断点处,在您的 JSON 字符串上方,您应该看到一个带有放大类的小型下拉小部件。将其拉下,单击“文本可视化器”。复制/粘贴该字符串并将其格式化为代码 【参考方案1】:Result 属性不包含另一个 json 对象它包含 json 字符串,您需要再次反序列化它。例如使用 Json.NET,它可能看起来像这样:
public class Outer
public string Result get; set;
public class Inner
public string RTime get; set; // or even make it of type DateTime, but there can be some format related issues
var outer = JsonConvert.DeserializeObject<Outer>(json);
var inner = JsonConvert.DeserializeObject<Inner>(outer.Result); // RTime prop will contain needed data
【讨论】:
以上是关于c# 反序列化 Json 字符串的主要内容,如果未能解决你的问题,请参考以下文章