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

C#使用dynamic類型訪問JObject對象

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

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

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

DynamicObject

我們要創(chuà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}");


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

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

相關(guān)文章

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

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

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

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

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

    c#通過xpath讀取xml示例

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

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

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

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

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

    詳解c# 事件總線

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

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

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

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

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

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

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

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

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

最新評論

万山特区| 建平县| 四平市| 陆丰市| 阳高县| 临泉县| 徐州市| 巩留县| 天津市| 娄底市| 海伦市| 汶川县| 水城县| 丰台区| 潮安县| 突泉县| 辽源市| 宿松县| 偃师市| 栾城县| 安徽省| 肥东县| 磴口县| 堆龙德庆县| 巴里| 体育| 井研县| 定兴县| 白玉县| 剑河县| 黎平县| 金寨县| 松溪县| 邻水| 盘山县| 黄冈市| 唐山市| 平度市| 慈溪市| 叙永县| 闸北区|