C# Json 解析,针对数字开头变量Json字符串转模型(Model)
namespace 解析数字开头的变量JSON
{
class Program
{
static void Main(string[] args)
{
string strJson = "{\"1st_attempt\":\"2021-02-09 16:32:15\",\"2nd_attempt\":\"2021-02-09 16:33:18\"}";
var objModel = JsonDictionaryModel<ResModels>(strJson);
} public class ResModels
{
public string _1st_attempt { get; set; }
public string _2nd_attempt { get; set; }
} public static T JsonDictionaryModel<T>(string strJson)
{
Dictionary<string, object> ProductDetailList = JsonConvert.DeserializeObject<Dictionary<string, object>>(strJson);
return ParseDictionaryToModel<T>(ProductDetailList);
}
public static T ParseDictionaryToModel<T>(Dictionary<string, object> dict)
{
T obj = default(T);
obj = Activator.CreateInstance<T>();
//根据Key值设定 Columns
foreach (KeyValuePair<string, object> item in dict)
{
PropertyInfo prop = obj.GetType().GetProperty(item.Key);
if (Equals(prop, null))
{
prop = obj.GetType().GetProperty("_"+item.Key);
}
if (!Equals(item.Value,null))
{
object value = item.Value;
//Nullable 获取Model类字段的真实类型
Type itemType = Nullable.GetUnderlyingType(prop.PropertyType) == null ? prop.PropertyType : Nullable.GetUnderlyingType(prop.PropertyType);
//根据Model类字段的真实类型进行转换
prop.SetValue(obj, Convert.ChangeType(value, itemType), null);
}
}
return obj;
}
}
}
https://www.cnblogs.com/volts0302/p/5195086.html
https://blog.csdn.net/weixin_33853794/article/details/92936314
改进版:
public static T JsonDictionaryModel<T>(string strJson)
{
Dictionary<string, object> ProductDetailList = JsonConvert.DeserializeObject<Dictionary<string, object>>(strJson);
return ParseDictionaryToModel<T>(ProductDetailList);
}
public static T ParseDictionaryToModel<T>(Dictionary<string, object> dict)
{
T objModel = Activator.CreateInstance<T>();
foreach (KeyValuePair<string, object> item in dict)
{
PropertyInfoMethod(objModel, item.Key, item.Value);
}
return objModel;
}
//这里实在想不到办法优化了
public static void PropertyInfoMethod(object objModel, string keyName, object objValue)
{
PropertyInfo prop = objModel.GetType().GetProperty(keyName) ?? objModel.GetType().GetProperty("_" + keyName);
if (!Equals(null, prop)&&!Equals(null, objValue))
prop.SetValue(objModel, Convert.ChangeType(objValue, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType), null);
}
C# Json 解析,针对数字开头变量Json字符串转模型(Model)的更多相关文章
- json解析的函数eval_r() 和 JSON.parse()
eval_r()解析的字符串格式是'({"data":"hello","num":"5"})' ...
- Qt JSON解析生成笔记(把JSON转成一个类对象)
对于这样一段json { "name": "布衣食", "gender": "Male", "age" ...
- 一起写一个JSON解析器
[本篇博文会介绍JSON解析的原理与实现,并一步一步写出来一个简单但实用的JSON解析器,项目地址:SimpleJSON.希望通过这篇博文,能让我们以后与JSON打交道时更加得心应手.由于个人水平有限 ...
- perl6 JSON::Fast模块json解析的使用
关于JSON: JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,语法简单,各种语言都有相应的库或者模块支持. 因为JSON非常小巧,解析起来又非常简单,我 ...
- 自己动手实现一个简单的JSON解析器
1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...
- java 写一个JSON解析的工具类
上面是一个标准的json的响应内容截图,第一个红圈”per_page”是一个json对象,我们可以根据”per_page”来找到对应值是3,而第二个红圈“data”是一个JSON数组,而不是对象,不能 ...
- Android okHttp网络请求之Json解析
前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...
- iOS json 解析遇到error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed.
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 38 ...
- Linux json解析jq
jq是一个linux下很方便的json解析器,平时看json文件都是一行混在一起的,非常不适合阅读. https://stedolan.github.io/jq/download/ 直接到官网上下载, ...
- iOS开发之网络数据解析(一)--JSON解析简介
前言:对服务器请求之后,返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 本篇随便先讲解JSON解析. 正文: 关于JSON: JSON是一种轻量级的数据格式,一般用于数据交互 ...
随机推荐
- Win10隐藏托盘图标-注册表
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer NoTrayItemsDisplay(类型: ...
- configparser.ConfigParser
这是fens.conf里的初始内容: 下面是python3中configparser的处理原码:import configparsercf = configparser.ConfigParser()c ...
- C#(如何解决使用enum和struct作为Dictionary的TKey带来的GC
- 什么是 Java 中的 JIT(Just-In-Time)?
Java 中的 JIT(Just-In-Time)编译器 1. JIT 的定义 JIT(Just-In-Time)编译器是一种用于 Java 虚拟机(JVM)的动态编译技术.它在 Java 程序运行时 ...
- 再谈kettle两种循环之--调用http分页接口循环获取数据
再谈kettle两种循环之 – 调用http分页接口循环获取数据 1.场景介绍: 由于数据量比较大,接口有返回限制,需要用到循环分页获取数据 2.案例适用范围: 循环job可参考,变量运用可参考,调用 ...
- 关于:js怎么获取元素的自定义属性的问题(原生JavaScript)
最近项目需要把后端传过来的数据隐藏的保存在页面中,方便后边做事件处理时使用.鉴于之前总是在后端处理后的页面中看到元素里除了常见的id.name属性外的data-xxx,就想到:元素的属性必然是可以自定 ...
- Sentinel源码—8.限流算法和设计模式总结
大纲 1.关于限流的概述 2.高并发下的四大限流算法原理及实现 3.Sentinel使用的设计模式总结 1.关于限流的概述 保护高并发系统的三把利器:缓存.降级和限流.限流就是通过限制请求的流量以达到 ...
- CV中常用Backbone-2:ConvNeXt模型详解及其代码
之前介绍了CV常用Backbon: CV中常用Backbone-1:Resnet/Unet/Vit系列/多模态系列等)以及代码 这里介绍新的一个Backbone:ConvNeXt,主要来自两篇比较老的 ...
- Ant Design Pro版中后台原型模板及Axure rplib元件库组件
Ant Design Pro版中后台原型模板及Axure rplib元件库组件, Ant Design服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更 ...
- 信息资源管理综合题之“什么是公钥基础设施(PKI) 和 PKI的任务核心 和 补全PKI认证服务系统流程图”
一.关于公钥基础设施(PKI),请回如下问题 1.PKI的核心任务是什么? 2.PKI的任务核心是什么? 3.基于PKI的认证服务系统至少由哪几部分组成?请将答案内容(1)~(5)填写在题中图下对应的 ...