在进行Linq to JSON之前,首先要了解一下用于操作Linq to JSON的类.
类名 | 说明 |
JObject | 用于操作JSON对象 |
JArray | 用于操作JSON数组 |
JValue | 表示数组中的值 |
JProperty | 表示对象中的属性,以“key/value”形式 |
JToken | 用于存放Linq to JSON查询后的结果 |
方法一:
object Data = null;
Dictionary<string, object> Dic = new Dictionary<string, object>();
MatchCollection Match = System.Text.RegularExpressions.Regex.Matches(json, @"""(.+?)"": {0,1}(\[[\s\S]+?\]|null|"".+?""|-{0,1}\d*)");//使用正则表达式匹配出JSON数据中的键与值
foreach (Match item in Match)
{
try
{
if (item.Groups[2].ToString().ToLower() == "null") Data = null;//如果数据为null(字符串类型),直接转换成null
else Data = item.Groups[2].ToString(); //数据为数字、字符串中的一类,直接写入
Dic.Add(item.Groups[1].ToString(), Data);
}
catch { }
}
JObject 遍历:
引用命名空间:using Newtonsoft.Json.Linq;
Dictionary<string, string> dic = new Dictionary<string, string>();
var p = Newtonsoft.Json.Linq.JObject.Parse(json);
foreach (Newtonsoft.Json.Linq.JToken child in p.Children())
{
var property1 = child as Newtonsoft.Json.Linq.JProperty;
dic.Add(property1.Name.ToString(), property1.Value.ToString());
}
上面这种遍历 一般情况下 是用在 不知道属性名称的时候,如果知道属性名称直接用 _jObject["ID"].ToString(),或者_jObject["ID"].Value<string>() 就行了。
Newtonsoft.Json.Linq.JObject _jObject = Newtonsoft.Json.Linq.JObject.Parse("{'Goods':{'GoodsId':'111',GoodsName:'Adidas'},'Mark':'2589'}");
var _value = _jObject["Goods"]["GoodsId"].ToString(); //取值 结果 : 111
创建JSON对象:
Newtonsoft.Json.Linq.JObject staff = new Newtonsoft.Json.Linq.JObject();
staff.Add(new Newtonsoft.Json.Linq.JProperty("Name", "Jack"));
staff.Add(new JProperty("Age", 33));
staff.Add(new JProperty("Department", "Personnel Department"));
staff.Add(new JProperty("Leader", new JObject(new Newtonsoft.Json.Linq.JProperty("Name", "Tom"), new JProperty("Age", 44), new JProperty("Department", "Personnel Department"))));
创建JSON数组:
Newtonsoft.Json.Linq.JArray arr = new Newtonsoft.Json.Linq.JArray();
arr.Add(new JValue(1));
arr.Add(new JValue(2));
arr.Add(new JValue(3));
json格式:
object jss = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
string js = jss.ToString();