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)的更多相关文章

  1. json解析的函数eval_r() 和 JSON.parse()

              eval_r()解析的字符串格式是'({"data":"hello","num":"5"})'   ...

  2. Qt JSON解析生成笔记(把JSON转成一个类对象)

    对于这样一段json { "name": "布衣食", "gender": "Male", "age" ...

  3. 一起写一个JSON解析器

    [本篇博文会介绍JSON解析的原理与实现,并一步一步写出来一个简单但实用的JSON解析器,项目地址:SimpleJSON.希望通过这篇博文,能让我们以后与JSON打交道时更加得心应手.由于个人水平有限 ...

  4. perl6 JSON::Fast模块json解析的使用

    关于JSON: JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,语法简单,各种语言都有相应的库或者模块支持. 因为JSON非常小巧,解析起来又非常简单,我 ...

  5. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  6. java 写一个JSON解析的工具类

    上面是一个标准的json的响应内容截图,第一个红圈”per_page”是一个json对象,我们可以根据”per_page”来找到对应值是3,而第二个红圈“data”是一个JSON数组,而不是对象,不能 ...

  7. Android okHttp网络请求之Json解析

    前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...

  8. 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 ...

  9. Linux json解析jq

    jq是一个linux下很方便的json解析器,平时看json文件都是一行混在一起的,非常不适合阅读. https://stedolan.github.io/jq/download/ 直接到官网上下载, ...

  10. iOS开发之网络数据解析(一)--JSON解析简介

    前言:对服务器请求之后,返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) 本篇随便先讲解JSON解析. 正文: 关于JSON: JSON是一种轻量级的数据格式,一般用于数据交互 ...

随机推荐

  1. study Python3 【1】

    用VSCode来编辑Python代码,作为IDE使用,有点头晕. https://www.runoob.com/python3/python-vscode-setup.html有介绍.还有更好的博客介 ...

  2. IDEA target中没有class文件/target中有class没有yml文件/yml文件不显示叶子

    target中没有class文件.表现为文件显示红波浪线,但是点进去自己又好了,但是编译会说找不到.点进入target文件夹发现没有class文件,只有yml文件或者什么都没有 解决方法:rebuil ...

  3. Postman+Newman生成接口测试报告

    1.安装node 安装完后进入cmd输入node检验版本 2.安装newman 打开cmd-->输入npm install -g newman,然后输入newman -v验证版本 3.安装htm ...

  4. javaweb基础之HTTP、Request、Response、ServletContext

    一.http协议是一个重要的协议,他是贯穿整合B/S架构的核心协议.因此学习http协议的时候一定要从请求和响应两个角度思考.注意方向性(请求:浏览器->服务器:响应:服务器->浏览器) ...

  5. 🎀windows-剪切板

    简介 Windows 剪贴板是一个临时存储区域,它允许用户在不同应用程序之间复制和粘贴文本.图像和其他类型的数据.从 Windows 10 开始,微软引入了一个改进的剪贴板功能,称为剪贴板历史记录,它 ...

  6. 华为od机考2025A卷真题 -寻找重复代码

    题目描述与示例 题目 小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的代码优化,请你帮助小明找出重复的代码. 重复代码查找方法:以字符串形式给出两行代码text1,text2(字符串长度1 ...

  7. windows里的一些常用的dos命令

    --------------------------------------------- 1. 中断命令执行 Ctrl + Z 2. 文件/目录 cd   切换目录 例:cd   // 显示当前目录 ...

  8. 小模型工具调用能力激活:以Qwen2.5 0.5B为例的Prompt工程实践

    在之前的分析中,我们深入探讨了cline prompt的设计理念(Cline技术分析:prompt如何驱动大模型对本地文件实现自主变更),揭示了其在激发语言模型能力方面的潜力.现在,我们将这些理论付诸 ...

  9. 代码随想录第二十七天 | Leecode 455. 分发饼干、 376. 摆动序列、 53. 最大子数组和

    Leecode 455. 分发饼干 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干. 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的 ...

  10. 遇到的问题之“input的值感觉没有设置上去,却有值”

    案例一.批量设置参数 1.被设置的框 改为下拉框的问题可参考:https://www.cnblogs.com/saoge/p/16985318.html <td> <app:inpu ...