首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C#]JSON反序列化对象--解析JSON文本

[C#]JSON反序列化对象--解析JSON文本

作者头像
科控物联
发布2022-06-13 18:28:55
发布2022-06-13 18:28:55
1.6K00
代码可运行
举报
文章被收录于专栏:科控自动化科控自动化
运行总次数:0
代码可运行

一直在用第三方的Json工具,现在才发现Json.net原版的就很好用。

并且借助JSON转C#实体类工具,几分钟就可以完成解析代码。

比如目前正在做的一个通讯测试,接收的信息如下:

代码语言:javascript
代码运行次数:0
运行
复制
{
  "Content": {
    "__startTime": "2022-05-14 16:46:46",
    "__name": "slave1",
    "__description": "安装在泵车2;研华4117模块",
    "__config": "[ModbusRtu] [ModRtu/slave1] [Com3:9600-8-N-1]",
    "__success": 35865,
    "__failed": 0,
    "__activeTime": "2022-05-14 20:45:55",
    "__captureSpendTime": 372,
    "__deviceStatus": true,
    "__requestEnable": true,
    "__onlineTime": "2022-05-14 16:46:48",
    "__failedMsg": "",
    "__alarmCount": {
      "AlarmCount": 0,
      "Hint": 0,
      "Warn": 0,
      "Error": 0,
      "Fatal": 0
    },
    "三参仪压力": 2222,
    "三参仪流量_mA信号": 28493
  },
  "IsSuccess": true,
  "Message": "成功",
  "ErrorCode": 0
}

直接根据JSon转实体类如下

代码语言:javascript
代码运行次数:0
运行
复制
public class __alarmCount
{
  /// <summary>
  /// 
  /// </summary>
  public int AlarmCount { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int Hint { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int Warn { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int Error { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int Fatal { get; set; }
}
public class ContentBase
{
  /// <summary>
  /// 
  /// </summary>
  public string __startTime { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string __name { get; set; }
  /// <summary>
  /// 安装在泵车2;研华4117模块
  /// </summary>
  public string __description { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string __config { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int __success { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int __failed { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string __activeTime { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int __captureSpendTime { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string __deviceStatus { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string __requestEnable { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string __onlineTime { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string __failedMsg { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public __alarmCount __alarmCount { get; set; }
}
public class Content : ContentBase
{

  /// <summary>
  /// 
  /// </summary>
  public int 三参仪压力 { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int 三参仪流量_mA信号 { get; set; }
  public int 三参仪流量 { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int 三参仪密度 { get; set; }
}

public class Root
{
  /// <summary>
  /// 
  /// </summary>
  public Content Content { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public string IsSuccess { get; set; }
  /// <summary>
  /// 成功
  /// </summary>
  public string Message { get; set; }
  /// <summary>
  /// 
  /// </summary>
  public int ErrorCode { get; set; }
}

运行结果如下:

总结:Json.NET已经实现了属性自动映射,很强大很好用。

以前的解析方法就不贴上来了,想想都觉得有点脱了裤子放屁。。。。。

官方例子。

反序列化对象 (newtonsoft.com)

This sample deserializes JSON to an object.

Types

Copy

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
复制
public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}

Usage

Copy

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
复制
string json = @"{
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
}";
代码语言:javascript
代码运行次数:0
运行
复制
Account account = JsonConvert.DeserializeObject<Account>(json);
Console.WriteLine(account.Email);
// james@example.com
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档