Json.net实现方便的Json转C#(dynamic动态类型)对象

Posted 王乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Json.net实现方便的Json转C#(dynamic动态类型)对象相关的知识,希望对你有一定的参考价值。

以前需要将一段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 可以回编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?

以上是关于Json.net实现方便的Json转C#(dynamic动态类型)对象的主要内容,如果未能解决你的问题,请参考以下文章

Json.net实现方便的Json转C#(dynamic动态类型)对象

C#如何Json转字符串;字符串转Json;Newtonsoft.Json(Json.Net)

如何在 C# 中动态转换来自 Json.NET 的解析 JSON 结果?

Json.NET 入门

没有 ASP.NET 的 C# JSON-RPC 网络服务器

C# 使用 Json.NET 读取 JSON 内容时保留转义序列