欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c# BackgroundWorker組件的作用

    c# BackgroundWorker組件的作用

    這篇文章主要介紹了c# BackgroundWorker組件的作用,幫助大家更好的理解和使用c#編程語言,感興趣的朋友可以了解下
    2020-12-12
  • C#中使用IrisSkin2.dll美化WinForm程序界面的方法

    C#中使用IrisSkin2.dll美化WinForm程序界面的方法

    這篇文章主要介紹了c#中使用IrisSkin2.dll美化WinForm程序界面的實現(xiàn)方法,需要的朋友可以參考下
    2013-05-05
  • C#讀取文件所有行到數(shù)組的方法

    C#讀取文件所有行到數(shù)組的方法

    這篇文章主要介紹了C#讀取文件所有行到數(shù)組的方法,涉及C#針對文件及數(shù)組的相關(guān)操作技巧,需要的朋友可以參考下
    2015-07-07
  • C#讀取與寫入txt文件內(nèi)容的實現(xiàn)方法

    C#讀取與寫入txt文件內(nèi)容的實現(xiàn)方法

    在 C# 中讀取和寫入文本文件內(nèi)容是一個常見的任務,本文主要介紹了使用幾種不同方法讀取和寫入文本文件的示例,并通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-08-08
  • 深入探討C#中的const、readonly關(guān)鍵字

    深入探討C#中的const、readonly關(guān)鍵字

    這篇文章主要介紹了深入探討C#中的const、readonly關(guān)鍵字,本文可以幫助你深刻理解這兩個關(guān)鍵字,而且是面試中最可能面試到的問題哦,需要的朋友可以參考下
    2014-08-08
  • C#調(diào)用WinAPI部分命令的方法實現(xiàn)

    C#調(diào)用WinAPI部分命令的方法實現(xiàn)

    本文主要介紹了C#調(diào)用WinAPI部分命令的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01
  • 淺談C# 中的委托和事件

    淺談C# 中的委托和事件

    本篇文章主要介紹C# 中的委托和事件,委托和事件在 .Net Framework中的應用非常廣泛,有興趣的可以了解一下。
    2016-12-12
  • C#超實用代碼段合集

    C#超實用代碼段合集

    這篇文章主要介紹了C#超實用代碼段合集,涉及C#針對圖標、數(shù)學運算、拼音、日期、時間及文件夾等的相關(guān)操作技巧,需要的朋友可以參考下
    2015-11-11
  • C#?WPF實現(xiàn)數(shù)據(jù)記錄導出excel

    C#?WPF實現(xiàn)數(shù)據(jù)記錄導出excel

    這篇文章主要為大家詳細介紹了C#如何基于WPF實現(xiàn)數(shù)據(jù)記錄導出excel的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-11-11
  • macOS系統(tǒng)下Vscode的python配置教程

    macOS系統(tǒng)下Vscode的python配置教程

    這篇文章主要介紹了macOS系統(tǒng)下Vscode的python配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04

最新評論