111,097
社区成员




static void Main(string[] args)
{
JObject jObject = JObject.Parse("{\"name\":\"test\",\"array\":[1,2,3]}");
Console.WriteLine($"直接访问name节点:{jObject["name"]}");
Console.WriteLine("遍历:");
AnalysisNode(jObject);
Console.ReadLine();
}
private static void AnalysisNode(object node)
{
if (node is JObject jObject)
{
if (jObject.HasValues)
{
foreach (var item in jObject)
{
Console.WriteLine($"节点:{item.Key}");
AnalysisNode(item.Value);
}
}
}
else if (node is JArray jArray)
{
if (jArray.HasValues)
{
foreach (var item in jArray)
{
AnalysisNode(item);
}
}
}
else if (node is JToken jToken)
{
Console.WriteLine(jToken);
}
}
class Response<T>
{
pubic T Body{get;set;}
}
static void Main(string[] args)
{
string json = "{\"a\":12,\"b\":[{\"c\":\"hello\"},{\"c\":\"tttt\"}]}";
dynamic obj = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(obj.a);
Console.WriteLine(obj.b[0].c);
Console.ReadLine();
}
public static class JsonConvertHelper
{
public static string Obj2Json<T>(T obj, Encoding encoding = null)
{
DataContractJsonSerializer serializer = null;
if (obj != null)
{
serializer = new DataContractJsonSerializer(obj.GetType());
}
else
{
serializer = new DataContractJsonSerializer(typeof(T));
}
string json = string.Empty;
using (MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms, obj);
if (encoding == null)
{
json = Encoding.UTF8.GetString(ms.GetBuffer());
}else
{
json = encoding.GetString(ms.GetBuffer());
}
ms.Close();
}
json = json.Trim('\0');
return json;
}
public static T Json2Obj<T>(this string json)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
T obj = default(T);
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
obj = (T)serializer.ReadObject(ms);
ms.Close();
}
return obj;
}
}
代码要引用系统自带的程序集System.Runtime.Serializationstring json = "{\"a\":12,\"b\":[{\"c\":\"hello\"},{\"c\":\"tttt\"}], 0:{code:\"abcde\"}}";
dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json);
Console.WriteLine(obj.a);
Console.WriteLine(obj.b[0].c);
var dic = (IDictionary<string, dynamic>)obj;
Console.WriteLine(dic["0"].code);
这里因为知道了 ExpandoObject 的接口特性,所以才读取了最终的 code。要操作好数据,既需要抽象又同时需要具体化。dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(json);
Console.WriteLine(obj.a);
Console.WriteLine(obj.b[0].c);
才更符合绝大多数人的第一感觉和想法。这能说明一个道理:不要盲目抽象。