分享

如何利用.Net内置类,解析未知复杂Json对象

 昵称10504424 2013-09-03

如果你乐意,当然可以使用强大的第三方类库Json.Net中的JObject类解析复杂Json字串 。

我不太希望引入第三方类库,所以在.Net内置类JavaScriptSerializer.DeserializeObject的基础上做了一些封装,可以方便的读取复杂json中的内容,而无需专门定义对应的类型。

等不及看的,直接下载源码: JsonObject.7z (2013-08-29更新,第三版)

 

代码实例:

 

复制代码
namespace JsonUtils
{
class Program
{
static void Main(string[] args)
{
string json = "{errNo:0,data:[{id:100,name:'jack'},{id:101,name:'tom',info:{birthday:'1989-6-5'}}]} ";
JsonObject value = JsonObject.Parse(json);
Console.Write(value["data"][1]["info"]["birthday"].Text());
Console.Read();
}
}
}
复制代码

 

封装的类:

 

复制代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Script.Serialization;
namespace JsonUtils
{
public class JsonObject
{
/// <summary>
/// 解析JSON字串
/// </summary>
public static JsonObject Parse(string json)
{
var js = new JavaScriptSerializer();
object obj = js.DeserializeObject(json);
return new JsonObject()
{
Value = obj
};
}
/// <summary>
/// 取对象的属性
/// </summary>
public JsonObject this[string key]
{
get
{
var dict = this.Value as Dictionary<string, object>;
if (dict != null && dict.ContainsKey(key))
{
return new JsonObject { Value = dict[key] };
}
return new JsonObject();
}
}
/// <summary>
/// 取数组
/// </summary>
public JsonObject this[int index]
{
get
{
var array = this.Value as object[];
if (array != null && array.Length > index)
{
return new JsonObject { Value = array[index] };
}
return new JsonObject();
}
}
/// <summary>
/// 将值以希望类型取出
/// </summary>
public T GetValue<T>()
{
return (T)Convert.ChangeType(Value, typeof(T));
}
/// <summary>
/// 取出字串类型的值
/// </summary>
public string Text()
{
return Convert.ToString(Value);
}
/// <summary>
/// 取出数值
/// </summary>
public double Number()
{
return Convert.ToDouble(Value);
}
/// <summary>
/// 取出整型
/// </summary>
public int Integer()
{
return Convert.ToInt32(Value);
}
/// <summary>
/// 取出布尔型
/// </summary>
public bool Boolean()
{
return Convert.ToBoolean(Value);
}
/// <summary>
////// </summary>
public object Value
{
get;
private set;
}
/// <summary>
/// 如果是数组返回数组长度
/// </summary>
public int Length
{
get
{
var array = this.Value as object[];
if (array != null)
{
return array.Length;
}
return 0;
}
}
}
}

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多