首页 > 编程语言 >【c#】JSON操作

【c#】JSON操作

时间:2024-10-17 09:00:03浏览次数:8  
标签:string Title c# List json JObject JSON new 操作

C#中使用Json,安装Newtonsoft.json依赖

读取json文件

注意:检查json文件的编码类型,是否为UTF-8。不是的话,读取到的中文会乱码

方法:json文件使用记事本打开,界面下方会显示编码类型。若不是,将文件另存为,更改即可。

private JObject ReadJsonFile(string folder, string fileName){
    string filePath = System.IO.Path.Combine(folder + "/" + fileName);
    using (System.IO.StreamReader file = System.IO.File.OpenText(filePath))
    {
        using (JsonTextReader reader = new JsonTextReader(file))
        {
            JObject jObject = (JObject)JToken.ReadFrom(reader);
            return jObject;
        }
    }
}

写入json文件

 private void WriteJsonFile(string folder, string fileName, JObject jObject){
     string filePath = System.IO.Path.Combine(folder + "/" + fileName);
     using (System.IO.StreamWriter file = new System.IO.StreamWriter(filePath))
     {
         file.Write(jObject.ToString());
     }
 }

几种常用类型

JObject 用于操作json对象

JToken 用于存放linq查询的结果

JArray 用于json数组

JValue 表示数组中的值

JProperty 表示对象的属性

JObject jo = new JObject(){{"name","张珊"},{"age",18}};
// {"name":"张三",“age”:18}

JToken jname = jo["Name"];

string[] girlFriends = {"韩梅梅","橘朵"};

JArray ja = new JArray();
foreach(var name in girlFriends){
    ja.Add(new JValue(name));
}

jo.Add(new JProperty("girlFriends",ja));

几种常用API

JObject.Parse 用于将字符串格式转成JObject

jo.ToObject<T> 用于将 JObject 类型转化成 实体类

JObject.FromObject 用于将 实体类 转化成 JObject

LINQ to JSON

查询

JObject o = JObject.Parse(@"{
  'CPU': 'Intel',
  'Drives': [
    'DVD read/writer',
    '500 gigabyte hard drive'
  ]
}");

List<string> allDrives = o["Drives"].Select(t => (string)t).ToList();//["DVD read/writer","500 gigabyte hard drive"]

新建

List<Post> GetPosts()
{
    List<Post> posts = new List<Post>() {
    new Post(){ Title = "A",Description ="A is a",Link = "http://www.a.com",Categories = new List<string>(){ "apple","alpha"} },
    new Post(){ Title = "B",Description ="B is b",Link = "http://www.b.com",Categories = new List<string>(){ "belt","baby"} },
    new Post(){ Title = "C",Description ="C is c",Link = "http://www.c.com",Categories = new List<string>(){ "cut","city"} }
    };
    return posts;
}
List<Post> posts = GetPosts();

JArray itemJArray = new JArray(
    from p in posts
    orderby p.Title
    select new JObject(
        new JProperty("title", p.Title),
        new JProperty("description", p.Description),
        new JProperty("link", p.Link),
        new JProperty("category",
        new JArray(
            from c in p.Categories
            select new JValue(c)
            )
        )
        )
    );

class Post
{
    public string? Title;
    public string? Description;
    public string? Link;
    public List<string>? Categories;
}

对象变JObject

JObject pp = JObject.FromObject(new
{
    channel = new
    {
        title = "D",
        link = "http://www.d.com",
        description = "D is d",
        item =
            from p in posts
            orderby p.Title
            select new
            {
                title = p.Title,
                description = p.Description,
                link = p.Link,
                category = p.Categories
            }
    }
});

path 获取值

pp.SelectToken("channel.item[0].title")

序列化

string aa = JsonConvert.SerializeObject(posts[0]);//对象序列化(变成json格式的字符串)
Post ppp = JsonConvert.DeserializeObject<Post>(aa);//json字符串 反序列化 (变成对象)

string json = @"{""key1"":""value1"",""key2"":""value2""}";
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);

标签:string,Title,c#,List,json,JObject,JSON,new,操作
From: https://www.cnblogs.com/sitarblogs/p/18471348

相关文章

  • 多平台文章同步浏览器插件 – ArticleSync
    ArticleSync-多平台文章同步插件ArticleSync是一个浏览器扩展,帮助用户轻松将文章同步发布到多个社交平台。支持将文章从本地草稿发布到各大平台,如知乎、Bilibili等。它提供了一站式解决方案,让你在不同的社交媒体平台上同步文章变得简单高效。基于浏览器插件模式,自动检测本......
  • ModuleNotFoundError: No module named 'cv2'
    前言运行 python3req.py 文件时遇到:ModuleNotFoundError:Nomodulenamed'cv2'原因是:环境中缺少 cv2 的包,所以会出现 Nomodulenamed'cv2’ 的问题。cv2 的包名并不叫 cv2 ,所以使用 pipinstallcv2 不能安装。cv2 的包名叫 opencv-python ,使用以下命令即......
  • orchard core 2.02 的模块 学习1 实践:创建阿里云sms模块
    1、手动创建2、命令行从模板创建手动创建就是复制一个官方的任意模块。这个不细说。2、我是从命令行创建的。首先要安装orchardcore的模板dotnetnewinstallOrchardCore.ProjectTemplates::2.0.2参考:https://docs.orchardcore.net/en/latest/getting-started/templates......
  • 【c#】内存共享
    类:MemoryMappedFileOpenExisting打开指定名称的内存映射文件,不存在的化报异常FileNotFoundExceptionprivateboolIsMMFExisting(stringmmfName){try{varmmf=MemoryMappedFile.OpenExisting(mmfName);if(mmf==null)returnfalse;......
  • 【Docker】Harbor 私有仓库和管理
    目录一、搭建本地私有仓库二、harbor简介(特性、构成、架构的数据流向)2.1 什么是Harbor2.2 Harbor的特性2.3 Harbor的构成2.4Harbor的工作原理(运行流程) 三、harbor部署以及配置文件1.部署Docker-Compose服务2.部署Harbor服务 3.启动Harbor4.查看Harb......
  • 集合论(ZFC)之基数(Cardinality)浅析
    直观感受(Intuition)与核心思想(CoreIdea)        集合的基数(Cardinality)是衡量集合的大小,也就是集合中元素的个数。但是,由于无限集与超限集的存在,因此,单纯用自然数去描述集合的大小是不可行的。自然数只能描述有限集的大小。所以,需要一个新的概念去描述集合的大小,那就是......
  • Office 2024 for mac 安装、激活教程
    声明本教程旨在学习分享。安装要求macOS12.0或更高版本,64位处理器安装步骤1、安装Office2024formac安装包;2、安装Office2024formac激活软件包;安装Office2024formac①下载Office2024formac,下载地址-点击下载②安装下载好的Office......
  • 10.16 CW 模拟赛 D. 迷宫(maze)
    题面传统T4找不到原题挂个pdf题面下载算法不容易想到把出发点,有被困同伴的人称作关键点那么只需要求出关键点之间,关键点到任意一个终点的最短距离,然后在搜索即可求解dijkstra算法求单源最短路\(n>10^3\),显然会T飞dijkstra算法求单源最短路\(\mathcal{O......
  • sicp每日一题[2.47]
    Exercise2.47Herearetwopossibleconstructorsforframes:(define(make-frameoriginedge1edge2)(listoriginedge1edge2))(define(make-frameoriginedge1edge2)(consorigin(consedge1edge2)))Foreachconstructorsupplytheappropriate......
  • 内核提供的通用I2C设备驱动I2C-dev.c分析:file_ops篇
    往期内容I2C子系统专栏:I2C(IIC)协议讲解-CSDN博客SMBus协议详解-CSDN博客I2C相关结构体讲解:i2c_adapter、i2c_algorithm、i2c_msg-CSDN博客内核提供的通用I2C设备驱动I2c-dev.c分析:注册篇总线和设备树专栏:总线和设备树_憧憬一下的博客-CSDN博客设备树与Linux内核设备......