首页 > 编程语言 >C#基础:JSON和字符串、字典、实体类的相互转化方案

C#基础:JSON和字符串、字典、实体类的相互转化方案

时间:2024-08-14 21:24:21浏览次数:10  
标签:实体类 string C# JsonDocument json JSON jsonDoc dict var

备注:可直接在控制台输出,不需要引用第三方nuget包

using System;
using System.Collections.Generic;
using System.Text.Encodings.Web;
using System.Text.Json;



class Program
{
    public class Data
    {
        public string MoCategorySelect { get; set; }

        public string SubcategorySelect { get; set; }
    }
    static void Main()
    {
        string data = @"{'MoCategorySelect':'AA','SubcategorySelect':'111'}";
        //任务一:sting=>json
        JsonDocument jsonDoc = GetJsonData(data);

        //任务二:string(json形式)=>dict(字典)
        var dict = GetDictionary(data);

        //任务三:json=>dict
        var dict2 = GetDictionary(jsonDoc);

        //任务四:json=>string
        var stringdata = GetStringByJson(jsonDoc);
        Console.WriteLine(stringdata);

        //任务五:dict=>json
        JsonDocument json = GetJsonData(dict);

        //任务六:T=>Json
        var entity = new Data() { MoCategorySelect = "AA", SubcategorySelect = "111" };
        var result = GetJsonData(entity);

        //任务七:JSON=>T
        var result2 = GetEntity<Data>(jsonDoc);
        ;
    }

    private static T GetEntity<T>(JsonDocument jsonDoc) where T : class
    {
        string jsonString = GetStringByJson(jsonDoc);
        T entity = JsonSerializer.Deserialize<T>(jsonString);//转换时严格遵循大小写
        return entity;
    }

    private static JsonDocument GetJsonData(Data entity)
    {        
        string jsonString = JsonSerializer.Serialize(entity);// 对象转换为 JSON 字符串
        return GetJsonData(jsonString);//JSON字符串=>json
    }

    private static Dictionary<string, string> GetDictionary(JsonDocument jsonDoc)
    {
        return GetDictionary(GetStringByJson(jsonDoc));
    }

    private static string GetStringByJson(JsonDocument jsonDoc)
    {
        var options = new JsonSerializerOptions
        {
            Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping // 禁用 Unicode 转义
        };

        // 直接序列化 JsonDocument 的根元素
        string jsonString = JsonSerializer.Serialize(jsonDoc.RootElement, options);
        return jsonString;
    }

    private static JsonDocument GetJsonData(Dictionary<string, string> dict)
    {
        string jsonString = JsonSerializer.Serialize(dict, new JsonSerializerOptions
        {
            Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
        });
        JsonDocument json = JsonDocument.Parse(jsonString);
        return json;
    }

    private static JsonDocument GetJsonData(string data)
    {
        return JsonDocument.Parse(data.Replace('\'', '\"'));
    }

    private static Dictionary<string, string> GetDictionary(string data)
    {
        var jsonObject = JsonDocument.Parse(data.Replace('\'', '\"')).RootElement;
        var dict = new Dictionary<string, string>();

        foreach (var property in jsonObject.EnumerateObject())
        {
            dict[property.Name] = property.Value.GetString();
        }
        return dict;
    }

}

标签:实体类,string,C#,JsonDocument,json,JSON,jsonDoc,dict,var
From: https://blog.csdn.net/m0_67412019/article/details/141187604

相关文章

  • PROCESSING_ORDER
    PROCESSING_ORDER属性决定XDC文件是否将由VivadoDesignSuite在约束处理期间,或正常处理,或延迟处理。PROCESSING_ORDER可以是:早期、正常或晚期。默认情况下,VivadoDesignSuite在用户XDC文件之前读取IP核的XDC文件在顶层设计的约束文件集中定义。以这种方式处理约束允许IP......
  • Web开发:C# MVC + Session机制实现授权免登录demo
    token基础demo【需求】Home/Index登录界面,校验成功后可以登录到Main/Index,用户登录3分钟内关闭网站,再次访问Home/Index时可以免密登录Main/Index【配置文件-Program.cs】varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.buil......
  • 『模拟赛』暑假集训CSP提高模拟20
    Rank有点可惜,暴力打满就并列Rank1了。A.Kanon原[JOI2021Final]雪玉签。考虑到每两个球之间的距离是恒不变的,因此我们可以通过找到每个球控制的边界得到答案,每个区间正好可以得出左边球的右边界和右边球的左边界。记录每个区间的标号和长度,按长度升序sort一遍,然......
  • ComfyUI系列教程(4)--ComfyUI基础节点LoRA
    ComfyUI基础节点LoRA2.ComfyUI基础节点2.1.LoRA2.1.1.LoRA原理2.1.2.LCM-LoRA2.1.3.ComfyUI示例2.ComfyUI基础节点本文主要介绍LoRA模型及ComfyUI中LoRA的连接方式。2.1.LoRALoRA是一种低成本微调大模型的方法,可以通过训练LoRA模型增强对应版本大模型的生成......
  • 【面试】分别解释一下C++、Java、Python程序的执行过程
    面试模拟场景面试官:你能分别解释一下C++、Java、Python程序的执行过程吗?参考回答示例1.C++程序的执行过程1.1编译过程:源代码编写:开发者编写C++源代码,文件扩展名为.cpp。预编译(Preprocessing):预编译是编译的第一步,使用预处理器(如cpp)对源代码进行处理。这一步主......
  • pytorch 3 计算图
    计算图结构分析:起始节点ab=5-3ac=2b+3d=5b+6e=7c+d^2f=2e最终输出g=3f-o(其中o是另一个输入)前向传播前向传播按照上述顺序计算每个节点的值。反向传播过程反向传播的目标是计算损失函数(这里假设为g)对每个中间变量和输入的偏导数。从右向左......
  • Datawhale X 魔搭 AI夏令营 AIGC方向 task2笔记
       纯小白,自学!从零入门AI生图(AIGC方向)基于魔搭社区“可图Kolors-LoRA风格故事挑战赛”开展实践学习。#DatawhaleX魔搭AI夏令营#一、利用AI精读baseline学习代码   task2的目的是精读baseline,从代码层面理解AI生图,直播演示了用通义千问解析代码,我也用GPT-4o,文心......
  • Sakana 推出开源AI Scientist:科研论文编写一条龙搞定
    你有没有想过,未来的科研会是怎样的?想象一下,一个不眠不休的研究助手,能够在没有人类监督的情况下,独立进行科学研究,从提出新想法到执行实验,再到撰写论文,全部自动完成。这听起来像科幻电影的情节,但在SakanaAI的努力下,这一愿景正在一步步变为现实。在现代科学研究中,科研人员常......
  • 【Material-UI】Floating Action Button (FAB) 详解:动画效果 (Animation)
    文章目录一、FAB按钮的动画概述1.默认动画效果2.多屏幕横向切换时的动画二、FAB动画效果的实现1.代码示例:跨标签页的FAB动画2.代码解析3.多个FAB的切换三、动画效果的最佳实践四、总结在现代网页设计中,动画不仅提升了用户界面的动态感,还增强了用户的交......
  • 视觉SLAM ch3补充——在Linux中配置VScode以及CMakeLists如何添加Eigen库
            ch3中的所有代码,除了在kdevelop中运行,还可以在VScode中运行。下面将简要演示配置过程,代码不再做解答,详细内容在下面的文章中。(这一节中的pangolin由于安装过程中会出现很多问题,且后续内容用不到该平台,所以暂时不进行安装)视觉SLAMch3—三维空间的刚体运动http......