zoukankan      html  css  js  c++  java
  • c#匿名类型

    匿名类型常见于脚本语言如js,as等等。

    一  使用对象序列化为匿名对象

    匿名类型的好处在于临时使用一次数据不需要,先定义再使用,比较方便,如在js中定义一个对象

    var obj={id='001',name='xxx'};

    使用则直接使用obj.id='0025';

    但是在c#这种强类型的语言中并不是这样方便,比如我需要将一个js接口返回的json数据进行反序列化,在此处以百度地图定位接口为例:

    http://api.map.baidu.com/location/ip
    返回参数:
    {  
            address: "CN|北京|北京|None|CHINANET|1|None",   #地址  
            content:       #详细内容  
            {  
            address: "北京市",   #简要地址  
            address_detail:      #详细地址信息  
            {  
            city: "北京市",        #城市  
            city_code: 131,       #百度城市代码  
            district: "",           #区县  
            province: "北京市",   #省份  
            street: "",            #街道  
            street_number: ""    #门址  
            },  
            point:               #百度经纬度坐标值  
            {  
            x: "116.39564504",  
            y: "39.92998578"  
            }  
            },  
            status: 0     #返回状态码  
        }

    如果实在js中则直接使用var location=JSON.parse(str); 属性直接可以使用location.xx使用
    如果在c#中先得定义一个数据类,然后反序列化为该数据类,在net4过后增加了匿名类型来勉强应付一下,不过有总比没有好,下面来看怎样使用

    1 基本思路
    将字符串反序列化为一个Jobject对象
    2 使用属性


    第一种做法(匿名类):

    var anonymous = new { a = 0, b = String.Empty, c = new int[0], d = new Dictionary<string, int>() };
    var o2 = JsonConvert.DeserializeAnonymousType(json, anonymous);

    Console.WriteLine(o2.b);
    Console.WriteLine(o2.c[1]);
    第二种做法(匿名类):
    var o3 = JsonConvert.DeserializeAnonymousType(json, new { c = new int[0], d = new Dictionary<string, int>() });
    Console.WriteLine(o3.d["y"]);
    
    
    第三种做法(索引器):

         实际上,我们也可以直接反序列化为 JObject,然后通过索引器直接访问。JObject、JProperty 等都继承自 JToken,它重载了基元类型转换操作符,我们可以直接得到实际结果。

    var o2 = JsonConvert.DeserializeObject(json) as JObject;

    Console.WriteLine((int)o2["a"]);
    Console.WriteLine((string)o2["b"]);
    Console.WriteLine(o2["c"].Values().Count());
    Console.WriteLine((int)o2["d"]["y"]);

    二 自定义构建匿名对象
    2.1 指明属性
    var obj=new {
      属性a="",
      属性b=3432
    };

    2.2 不指明属性
    var pt=new Point(122,30);

    var obj=new {pt.x,pt.y }
    此时x,y则默认为该obj对象属性





  • 相关阅读:
    天地图OGC WMTS服务规则
    【异常】VS中运行HTTP 无法注册URL
    【TextBox】重写右键菜单
    【ContextMenu】DataContext不自动更新
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/rjjs/p/5455556.html
Copyright © 2011-2022 走看看