Json.net实现方便的Json转C#(dynamic动态类型)对象
2017-05-19 16:11
471 查看
以前需要将一段json字符串转换为C#对象时,一般都是定义一个与之对应的实体类来接收。这样做有一个很大的缺点,就是当字符串特别长,属性特别多,又有嵌套时,手敲这个实体类就非常痛苦。
比如之前做的一个接收百度七天天气预报的API,层层嵌套,很痛苦。
C# 4.0 之后有了动态类型dynamic。用这个东西配合Json.net可以实现不用定义实体类的json转dynamic类型对象。
以下示例需要先引用Newtonsoft.Json.dll
public class Person {
public int Id { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.Id = 1;
p.Name = "刘备";
//C#对象转Json
string json = JsonConvert.SerializeObject(p);
Console.WriteLine(json); //{"Id":1,"Name":"刘备"}
//此处模拟在不建实体类的情况下,反转将json返回dynamic对象
var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(DynamicObject.Name); //刘备
Console.ReadKey();
}
}
以上只是借用了一个实体类来获得一个简单的JSON对象。
实际上,可以完全没有这个Person类
static void Main(string[] args)
{
string json = "{\"Id\":1,\"Name\":\"刘备\",\"Age\":\"22\"}";
//此处模拟在不建实体类的情况下,反转将json返回回dynamic对象
var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(DynamicObject.Name); //刘备
Console.ReadKey();
}如果未引用Microsoft.CSharp.dll,关于动态类型,VS可能会报错。
VS 可以回编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?
比如之前做的一个接收百度七天天气预报的API,层层嵌套,很痛苦。
C# 4.0 之后有了动态类型dynamic。用这个东西配合Json.net可以实现不用定义实体类的json转dynamic类型对象。
以下示例需要先引用Newtonsoft.Json.dll
public class Person {
public int Id { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.Id = 1;
p.Name = "刘备";
//C#对象转Json
string json = JsonConvert.SerializeObject(p);
Console.WriteLine(json); //{"Id":1,"Name":"刘备"}
//此处模拟在不建实体类的情况下,反转将json返回dynamic对象
var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(DynamicObject.Name); //刘备
Console.ReadKey();
}
}
以上只是借用了一个实体类来获得一个简单的JSON对象。
实际上,可以完全没有这个Person类
static void Main(string[] args)
{
string json = "{\"Id\":1,\"Name\":\"刘备\",\"Age\":\"22\"}";
//此处模拟在不建实体类的情况下,反转将json返回回dynamic对象
var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(DynamicObject.Name); //刘备
Console.ReadKey();
}如果未引用Microsoft.CSharp.dll,关于动态类型,VS可能会报错。
VS 可以回编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?
相关文章推荐
- Json.net实现方便的Json转C#(dynamic动态类型)对象
- Json.net实现方便的Json转C#(dynamic动态类型)对象
- Json.net实现方便的Json转C#(dynamic动态类型)对象
- Json.net实现方便的Json转C#(dynamic动态类型)对象
- 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic
- C#动态对象(dynamic)示例(实现方法和属性的动态)
- C# 匿名对象(匿名类型)、var、动态类型 dynamic
- C#动态对象(dynamic)示例(实现方法和属性的动态)
- c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic
- C# 匿名对象(匿名类型)、var、动态类型 dynamic
- C#动态对象(dynamic)示例(实现方法和属性的动态)
- C# 匿名对象(匿名类型)、var、动态类型 dynamic
- C#动态对象(dynamic)详解(实现方法和属性的动态)
- C#动态对象(dynamic)示例(实现方法和属性的动态)
- C#.NET 动态Linq DynamicQueryable
- dynamic 动态类型 教你写不可思议的C#代码
- c#和Javascript操作同一json对象的实现代码
- 分享一段C#反射代码-[Type是反射的入口]--[查看类型信息]--[动态生成对象]
- c#语言asp.net实现treeview控件读数据库动态生成树的代码
- ASP.NET(C#)实现一次性动态上传多张图片的代码(多个文件)