最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用dynamic類型訪問JObject對(duì)象

 更新時(shí)間:2018年04月17日 09:16:40   作者:ZKEASOFT  
這篇文章主要為大家詳細(xì)介紹了C#使用dynamic類型訪問JObject對(duì)象,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

dynamic是C#里面的動(dòng)態(tài)類型,可在未知類型的情況訪問對(duì)應(yīng)的屬性,非常靈活和方便。

使用Json.Net可以把一個(gè)Json字符串轉(zhuǎn)換成一個(gè)JObject對(duì)象,如果有已知強(qiáng)類型,如果有已知對(duì)應(yīng)的強(qiáng)類型,可以直接轉(zhuǎn)成對(duì)應(yīng)的類型。但如果沒有,要訪問Json里面對(duì)應(yīng)的數(shù)據(jù)的時(shí)候,就顯得比較麻煩。我們可以借助DynamicObject來訪問對(duì)應(yīng)的屬性。

DynamicObject

我們要?jiǎng)?chuàng)建一個(gè)動(dòng)態(tài)類,用于訪問JObject,代碼如下:

public class JObjectAccessor : DynamicObject
{
  JToken obj;

  public JObjectAccessor(JToken obj)
  {
    this.obj = obj;
  }

  public override bool TryGetMember(GetMemberBinder binder, out object result)
  {
    result = null;
      
    if (obj == null) return false;

    var val = obj[binder.Name];

    if (val == null) return false;

    result = Populate(val);

    return true;
  }


  private object Populate(JToken token)
  {
    var jval = token as JValue;
    if (jval != null)
    {
      return jval.Value;
    }
    else if (token.Type == JTokenType.Array)
    {
      var objectAccessors = new List<object>();
      foreach (var item in token as JArray)
      {
        objectAccessors.Add(Populate(item));
      }
      return objectAccessors;
    }
    else
    {
      return new JObjectAccessor(token);
    }
  }
}

接下來就可以開始使用它了:

string json = @"{'name': 'Jeremy Dorn','location': {'city': 'San Francisco','state': 'CA'},'pets': [{'type': 'dog','name': 'Walter'}]}";

JObject jobj = JObject.Parse(json);

dynamic obj = new JObjectAccessor(jobj);

Console.WriteLine($"{obj.name}: {obj.location.city} {obj.location.state}");
Console.WriteLine($"{obj.pets[0].type}: {obj.pets[0].name}");


運(yùn)行一下程序,看一下輸出結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實(shí)現(xiàn)websocket雙向通信的示例代碼

    C#實(shí)現(xiàn)websocket雙向通信的示例代碼

    本文基于WebSocketSharp實(shí)現(xiàn)了websocket雙向通信,除基本的客戶端向服務(wù)端發(fā)送消息外,也支持客戶端向指定的客戶端發(fā)送消息、群發(fā)消息,其他協(xié)議可自定義,廢話不多說,直接上干貨,需要的朋友可以參考下
    2024-06-06
  • 使用C#將Excel轉(zhuǎn)為XML的兩種方案

    使用C#將Excel轉(zhuǎn)為XML的兩種方案

    在數(shù)據(jù)處理場(chǎng)景中,Excel文件常作為中間格式存在,但其結(jié)構(gòu)化程度有限,若需將Excel數(shù)據(jù)導(dǎo)入系統(tǒng)、進(jìn)行二次分析或與XML格式服務(wù)對(duì)接,Excel 轉(zhuǎn) XML 成為一項(xiàng)高頻需求,所以本文給大家介紹了使用C#將Excel轉(zhuǎn)為XML的兩種方案,需要的朋友可以參考下
    2025-09-09
  • c#通過xpath讀取xml示例

    c#通過xpath讀取xml示例

    這篇文章主要介紹了c#通過xpath讀取xml示例,需要的朋友可以參考下
    2014-04-04
  • 使用C#實(shí)現(xiàn)簡(jiǎn)單的線性回歸的代碼詳解

    使用C#實(shí)現(xiàn)簡(jiǎn)單的線性回歸的代碼詳解

    最近注意到了NumSharp,想學(xué)習(xí)一下,最好的學(xué)習(xí)方式就是去實(shí)踐,因此從github上找了一個(gè)用python實(shí)現(xiàn)的簡(jiǎn)單線性回歸代碼,然后基于NumSharp用C#進(jìn)行了改寫,需要的朋友可以參考下
    2024-01-01
  • C#實(shí)現(xiàn)將應(yīng)用程序設(shè)置為開機(jī)啟動(dòng)的方法

    C#實(shí)現(xiàn)將應(yīng)用程序設(shè)置為開機(jī)啟動(dòng)的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)將應(yīng)用程序設(shè)置為開機(jī)啟動(dòng)的方法,涉及C#針對(duì)注冊(cè)表的寫入技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • 詳解c# 事件總線

    詳解c# 事件總線

    這篇文章主要介紹了c# 事件總線的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-05-05
  • c#爬蟲爬取京東的商品信息

    c#爬蟲爬取京東的商品信息

    這篇文章主要給大家介紹了關(guān)于利用c#爬蟲爬取京東商品信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • C#利用ScriptControl動(dòng)態(tài)執(zhí)行JS和VBS腳本

    C#利用ScriptControl動(dòng)態(tài)執(zhí)行JS和VBS腳本

    C#中利用ScriptControl動(dòng)態(tài)執(zhí)行JS和VBS腳本的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2013-04-04
  • C#實(shí)現(xiàn)簡(jiǎn)單聊天程序的方法

    C#實(shí)現(xiàn)簡(jiǎn)單聊天程序的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單聊天程序的方法,實(shí)例分析了C#聊天程序的原理與客戶端、服務(wù)器端的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • c++與c#的時(shí)間轉(zhuǎn)換示例分享

    c++與c#的時(shí)間轉(zhuǎn)換示例分享

    這篇文章主要介紹了C++與C#的時(shí)間轉(zhuǎn)換方法,大家參考使用吧
    2013-12-12

最新評(píng)論

西盟| 宁国市| 辽宁省| 洪江市| 宁德市| 汽车| 内乡县| 得荣县| 通州区| 东至县| 竹北市| 敦煌市| 靖州| 林西县| 太仆寺旗| 通城县| 靖宇县| 军事| 湖口县| 宁南县| 博爱县| 广昌县| 鄂州市| 衡山县| 婺源县| 裕民县| 定南县| 南丰县| 靖西县| 泰来县| 铁力市| 镇沅| 谢通门县| 曲周县| 阜平县| 师宗县| 柘城县| 汨罗市| 大同市| 锡林郭勒盟| 石林|