zoukankan      html  css  js  c++  java
  • 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 可以回编译报错:找不到编译动态表达式所需的一个或多个类型。是否缺少引用?

  • 相关阅读:
    LeetCode 189. Rotate Array
    LeetCode 965. Univalued Binary Tree
    LeetCode 111. Minimum Depth of Binary Tree
    LeetCode 104. Maximum Depth of Binary Tree
    Windows下MySQL的安装与配置
    LeetCode 58. Length of Last Word
    LeetCode 41. First Missing Positive
    LeetCode 283. Move Zeroes
    《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践》读后感
    删除docker下的镜像
  • 原文地址:https://www.cnblogs.com/leebokeyuan/p/11310606.html
Copyright © 2011-2022 走看看