小Q的博客

  • 首页
  • net编程
    • 产品和框架
    • 开发实例
    • 经验技巧
    • 开源组件
  • wp独立站
  • 自媒体
  • 日记本
  • 工具箱
每个程序员,都应该有一个自己的博客站
  1. 首页
  2. net编程
  3. 经验技巧
  4. 正文

net中c#教程 Json字符串的常用操作

2022年10月7日 1861点热度 0人点赞 0条评论

json字符串格式的出现,大大地方便了不同系统间的数据传输,无论是Net项目还是Java项目都适用。今天就分享几个json的常用操作。我们是基于Newtonsoft.Json这个第三方类库实现的,使用Nuget就可以直接下载

net教程之json串

Table of Contents

Toggle
  • 1、动态创建类
  • 2、Object转Json串
  • 3、DataTable转Json串
  • 4、json串转List<T>
  • 5、json串转DataTable
  • 6、Xml和Json互转
  • 7、转为微软的Json类
  • 8、某些属性特殊化

1、动态创建类

Model类可以是静态创建好的,也可以是动态生成的。使用dynamic这个类就可以,非常方便 。下面2种方法都可以,效果一样

//1,动态创建类
//1.1,方法1
dynamic dynaP1 = new { id = "11", name = "name11" };
//1.2,方法2
dynamic dynaP2 = new ExpandoObject();
dynaP2.id = "11";
dynaP2.name = "name11";

 

2、Object转Json串

这是最常用的操作了,代码实现也简单

//2,Object生成json串
string json2 = JsonHelper.GetJsonByObject(dynaP1);

 

3、DataTable转Json串

和Object稍微有些区别,但也能实现

//3,DataTable生成json串
DataTable dt3 = new DataTable();
dt3.Columns.Add("id", typeof(int));
dt3.Columns.Add("name", typeof(string));
dt3.Columns.Add("ctime", typeof(DateTime));
for (int i = 1; i <= 20; i++)
{
    dt3.Rows.Add(new object[] { 1, "name_" + i.ToString(), DateTime.Now });
}
string json3 = JsonHelper.GetJsonByDataTable(dt3);

 

4、json串转List<T>

//4,json串转List<T>
List<dynamic> listP4 = new List<dynamic>();

dynamic dynaP41 = new ExpandoObject();
dynaP41.id = 1;
dynaP41.name = "name1";
listP4.Add(dynaP41);
dynamic dynaP42 = new ExpandoObject();
dynaP42.id = 2;
dynaP42.name = "name2";
listP4.Add(dynaP42);
string json4 = JsonHelper.GetJsonByObject(listP4);

List<PersonModel> list41 = JsonHelper.GetObjectByJson<List<PersonModel>>(json4);
int rowCount41 = list41.Count;  //结果:2

 

5、json串转DataTable

//5,json串转DataTable
DataTable dt5 = new DataTable();
dt5.Columns.Add("id", typeof(int));
dt5.Columns.Add("name", typeof(string));
dt5.Columns.Add("ctime", typeof(DateTime));
for (int i = 1; i <= 20; i++)
{
    dt5.Rows.Add(new object[] { 1, "name_" + i.ToString(), DateTime.Now });
}
string json5 = JsonHelper.GetJsonByDataTable(dt5);
DataTable dt51 = JsonHelper.JsonToDataTable(json5);

 

6、Xml和Json互转

这个场景在开放平台的API参数里,Json没出现之前,都是用Xml传输数据的

//6,json和xml格式互转
List<PersonModel> list6 = new List<PersonModel>();
for (int i = 1; i < 10; i++)
{
    list6.Add(new PersonModel()
    {
        id = i,
        name = "name-" + i.ToString(),
        ctime = DateTime.Now,
    });
}

//上面是真正的json串数据,下面要额外加工下
dynamic dyna6Root = new ExpandoObject();
dyna6Root.json1 = list6;
string json6Root = JsonHelper.GetJsonByObject(dyna6Root);

//json转xml
string json6ToXml = @"{
  ""?xml"":{
    ""@version"": ""1.0"",
    ""@standalone"": ""no""
  },""root"":" + json6Root + "}";
string xml6 = JsonHelper.JsonToXml(json6ToXml);

//Xml转Json
string json6ByXml = JsonHelper.XmlToJson(xml6);

 

7、转为微软的Json类

//7,转为微软json类
PersonModel model7 = new PersonModel()
{
    id = 111,
    name = "name-111",
    ctime = DateTime.Now,
};
string json7 = JsonHelper.GetJsonByObject(model7);

Dictionary<string, object> dic7 = JsonHelper.GetObjectByJsonMS(json7) as Dictionary<string, object>;
object objId = dic7["id"];  //结果:111

 

8、某些属性特殊化

比如属性名和类中命名的不同、某些属性不需要显示等

//8,某些属性名称特殊化
PersonModel model8 = new PersonModel()
{
    id = 15,
    name = "name-15",
    ctime = DateTime.Now,
    alias_name = "alias-name-15",
    sex = "1"
};

//{"id":15,"name":"name-15","ctime":"2022-10-07 19:31:52","AliasName":"alias-name-15"}
string json8 = JsonHelper.GetJsonByObject(model8);

 

public class PersonModel
{
    public int id { get; set; }
    public string name { get; set; }
    public DateTime ctime { get; set; }

    /// <summary>
    /// 生成的json串中,其属性名是AliasName
    /// </summary>
    [JsonProperty(PropertyName = "AliasName")]
    public string alias_name { get; set; }

    /// <summary>
    /// 此特性表示不出现在json串中
    /// </summary>
    [JsonIgnore]
    public string sex { get; set; }

}

 

相关阅读

net中c#教程 DataTable的常用操作

net中c#教程 DateTime日期时间的常用操作

net中c#教程 list泛型的常用操作

net中c#教程 string字符串的常用操作

标签: c#教程 json操作 net教程
最后更新:2022年10月7日

小Q

80后中年不油腻大叔,喜欢编写代码、打羽毛球、做木制玩具。目前定居浙江杭州

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2022 小Q的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

浙ICP备2022019157号-2