C# 对象 和 Json 各种转换
第二篇,直接进入正题
对象转Json
首先我们要引用一个NuGet程序包
引用方法如下:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
添加引用:
右键项目-》管理NuGet程序包-》浏览-》搜索:Newtonsoft,根据自己的程序框架选择对应的版本
如果搜索不出结果就把程序包源切换到:nuget.org,如下图:
我这边为了方便,用txt存放Json,直接读取。
//string 转 Json
/*
* testjson.txt内容如下
{
"name": "zs",
"age": 20
}
*/
string _jsonfile = File.ReadAllText("testjson.txt");
JObject _json = JObject.Parse(_jsonfile);
string _name = _json["name"].ToString();//name是字符串推荐使用ToString()取值
int _age = (int)_json["age"];
Console.WriteLine("name:" + _name);
Console.WriteLine("age:" + _age);
//out:
//name:zs
//age:20
实体类 与 Json 互相转换
//实体类转Json
public class Root
{
public string name { get; set; }
public int age { get; set; }
public DateTime date { get; set; }
}
Root root = new Root
{
name = "zs",
age = 22,
date = DateTime.Now
};
string _json = JsonConvert.SerializeObject(root);
Console.WriteLine(_json);
//Json 转 对象
Root _root = JsonConvert.DeserializeObject<Root>(_json);
Console.WriteLine(_root.age);
Console.WriteLine(_root.date);
Console.WriteLine(_root.name);
//out:
//22
//2019/8/16 21:30:27
//zs
接下来是 Json 转换 List< T >
//举个栗子
List<Root> _roots = new List<Root>();
for (int i = 0; i < 3; i++)
{
Root root = new Root
{
name = "zs0",
age = 22,
date = DateTime.Now
};
root.name += i;
_roots.Add(root);
}
//把List<T>转换Json还是用JsonConvert.SerializeObject()
string _json = JsonConvert.SerializeObject(_roots);
Console.WriteLine(_json);
//out:
//[{"name":"zs00","age":22,"date":"2019-08-16T21:55:35.5833003+08:00"},
//{ "name":"zs01","age":22,"date":"2019-08-16T21:55:35.5833003+08:00"},
//{ "name":"zs02","age":22,"date":"2019-08-16T21:55:35.5833003+08:00"}]
//Json转换List<T>
List<Root> _root = JsonConvert.DeserializeObject<List<Root>>(_json);
foreach (Root rootNode in _root)
{
Console.WriteLine(rootNode.age);
Console.WriteLine(rootNode.date);
Console.WriteLine(rootNode.name);
}
//out:
//2019 / 8 / 16 21:54:32
//zs00
//22
//2019 / 8 / 16 21:54:32
//zs01
//22
//2019 / 8 / 16 21:54:32
//zs02
//这里是 Dictionary 与 Json 的互相转换
Dictionary<string, Root> _keyValues = new Dictionary<string, Root>();
Root _root = new Root
{
name = "zs",
age = 22,
date = DateTime.Now
};
_keyValues.Add("01", _root);
//Dictionary 转换 Json 还是用 JsonConvert.SerializeObject() 方法
string _json = JsonConvert.SerializeObject(_keyValues);
Console.WriteLine(_json);
//out:
//{"01":{"name":"zs","age":22,"date":"2019-08-16T22:02:04.3782758+08:00"}}
// Json 转换对应类型的 Dictionary
Dictionary<string, Root> _jsonConvert = JsonConvert.DeserializeObject<Dictionary<string, Root>>(_json);
Root _root01 = _jsonConvert["01"] as Root;
Console.WriteLine(_root01.age);
Console.WriteLine(_root01.date);
Console.WriteLine(_root01.name);
//out:
//22
//2019 / 8 / 16 22:09:03
//zs
总结
以上例子可以归为两个方法:
1.对象转换Json用:
string _json = JsonConvert.SerializeObject(object);
2.Json转换对象使用:
object _object = JsonConvert.DeserializeObject< object >(_json)