好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#使用dynamic类型访问JObject对象

dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。

使用Json.Net可以把一个Json字符串转换成一个JObject对象,如果有已知强类型,如果有已知对应的强类型,可以直接转成对应的类型。但如果没有,要访问Json里面对应的数据的时候,就显得比较麻烦。我们可以借助DynamicObject来访问对应的属性。

DynamicObject

我们要创建一个动态类,用于访问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}" );

运行一下程序,看一下输出结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://HdhCmsTestzkea.net/codesnippet/detail/post-99.html

dy("nrwz");

查看更多关于C#使用dynamic类型访问JObject对象的详细内容...

  阅读:60次