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. javascript 判断浏览器

    navigator.userAgent 通常我们可以通过navigator.userAgent只读属性来获取浏览器的一些信息,算是原生方法吧. jquery -jquery1.9 版本可以通过$.br ...

  2. python-pandas提取网页内tables(表格类型)数据

    比如,下面网页里大学排行的数据 分析这个页面,表格内的数据是包裹在tables里的 这样就可以使用pandas对数据进行提取并且导出成csv文件,具体代码很简单 import pandas as pd ...

  3. AI提示词:一个通用C++ ECS系统实现(事件条件动作系统)

    AI提示词 using eca_cond = bool(*)(...); using eca_action = void(*)(...); class eca_info { public: eca_c ...

  4. 有的时候,给指定的控件,追加一个装饰器Adorner,备注下

    有的时候,给指定的控件,追加一个装饰器Adorner,备注下 比如给某个图片加个工具条等等...都可以采用装饰器的方式来实现,复用性高,易维护,特此备注下 整体效果如下: 1 <Window x ...

  5. ctf.show刷题记录_web(1-10)

    ctf平台(ctfshow) `https://ctf.show/ 1.签到 解题:base64解码 ctfshow{0da357d0-359b-47e1-80dc-5c02212725e5} 2.w ...

  6. 【从0到1800 Star】90天,我用0预算推广了一个C语言项目

    亲爱的朋友们,我想和你们分享一下这90多天的开发旅程,虽然不涉及具体的技术部分,但我相信这些经验对你的项目会有所帮助哦 Catime是如何在大约90天内从0做到1800+ star的呢?其中最主要的原 ...

  7. Web前端入门第 51 问:移动端适配的视口元标签(meta)常见使用场景

    经常查看网页源码的同学应该都有注意到,基本上面向移动端的所有网站都有个 <meta name="viewport" xxx> 这样的HTML元素. 为什么需要 meta ...

  8. c++并发编程实战-第1章 c++并发世界

    前言 c++11开始支持多线程,使得编写c++多线程程序无需依赖特定的平台,使开发者能够编写可移植的.行为确定的多线程程序代码. 什么是并发 所谓并发,是两个或多个同时独立进行的活动.而计算机中的并发 ...

  9. MongoDB创建数据库文件的存放位置

    为什么要写这篇呢,故事还得从MongoDB如下所示的罢工说起 怎么就拒绝访问了呢???? 在执行mongod命令可发现如下问题: 于是,在蜘蛛网上到处扒拉,以解它这不解之症,也解我燃眉之急 终于... ...

  10. Linux Shell整理小知识

    Linux Shell整理小知识 介绍两个命令 1. shopt shell option, 即shell的一些选项设置 [root@localhost ~]# shopt autocd off cd ...