常用
- 获取时区分大小写
jobject.ToString()
jobject.ToObject<T>()
jobject.ContainsKey("ddd")
if (!data.ContainsKey("deviceIndex") || data["deviceIndex"] == null)
{
response.Message = "上报数据错误,请检查:deviceIndex";
return response;
}
JToken:用于存放Linq to JSON查询后的结果
//jObj.ToString()
//将json转换为JObject
JObject jObj = JObject.Parse(json);
JToken colleagues = jObj["Colleagues"];
colleagues[0]["Age"] = 45;
jObj["Colleagues"] = colleagues;//修改后,再赋给对象
Console.WriteLine(**jObj.ToString()**);
dynamic
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}");