代码改变世界

Dynamic系列--Dynamic 与反序列化

2015-06-15 15:23  Shawn.Cheng  阅读(2863)  评论(0编辑  收藏  举报

通常在调用其他站点的api时,如果返回的结果为 json数据,而我们又不想再重新定义实体类时,可以使用dynamic类型。
但是有以下需要注意的地方。

  • 当内容为空时,反序列化结果为null
  • 当内容格式有误,不可反序列化时,将会抛出异常。
  • 内容正确时,得到的对象是 Dictionary<string,object> ( 为什么不是真正的dynamic,这里究竟发生了什么?需要后期研究 )
  • 如果是数组,则得到的对象是 object[] 每个object为Dictionary<string,object>。

且看如下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Web.Script.Serialization;

namespace ConAppTestJavaScriptSerilazation
{
    class Program
    {
        static void Main(string[] args)
        {

            //反序列化 返回结果为 object  真是类型是Dictionary<string,object>
            var content0 = @"{name:'cjt',age:10}";
            var res0 = new JavaScriptSerializer().Deserialize<dynamic>(content0);

            //反序列化 返回结果为 object[] 每个object实际上是一个Dictionary<string,object>类型
            var content1= @"[
                                {name:'cjt',age:10},
                                {name:'cjt2',age:21},
                                {name:'cjtc',age:16}
                            ]";
            var res1 = new JavaScriptSerializer().Deserialize<dynamic>(content1);


            //当内容为空时,反序列化返回结果为NULL
            var content2 = "";
            var res2 = new JavaScriptSerializer().Deserialize<dynamic>(content2);

            Console.ReadLine();
        }
    }
}