当前位置:首页 > Windows程序 > 正文

c# 解析JSON的几种办法

2024-03-31 Windows程序

标签:

对比 .NET下几种常见的解析JSON方法 主要类命名空间限制内建LINQ支持
DataContractJsonSerializer   System.Runtime.Serialization.Json   通用    
  System.Web.Script.Serialization   只能在Web环境使用    
JsonArray、JsonObject、JsonValue   System.Json   只能在Silverlight中使用    
JsonConvert、JArray、JObject、JValue、JProperty   Newtonsoft.Json   通用    
准备数据

实体类:

[DataContract] public class Person { [DataMember(Order = 0, IsRequired = true)] public string Name { get; set; } [DataMember(Order = 1)] public int Age { get; set; } [DataMember(Order = 2)] public bool Alive { get; set; } [DataMember(Order = 3)] public string[] FavoriteFilms { get; set; } [DataMember(Order = 4)] public Person Child { get; set; } }

定义:

Action<object> log = o => Console.WriteLine(o); Func<int, int, int> add = (x, y) => x + y; var p1 = new Person { Age = 12, Alive = true, Name = "lj", FavoriteFilms = new[] { "Up", "Avatar" } }; var p2 = new Person() { Age = 28, Name = "cy", Child = p1 }; 使用DataContractJsonSerializer

帮助类:

// using System.Runtime.Serialization.Json; /// <summary> /// 解析JSON,,仿Javascript风格 /// </summary> public static class JSON { public static T parse<T>(string jsonString) { using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))) { return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms); } } public static string stringify(object jsonObject) { using (var ms = new MemoryStream()) { new DataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms, jsonObject); return Encoding.UTF8.GetString(ms.ToArray()); } } }

用法:

// 序列化 var jsonString = JSON.stringify(new[] { p1, p2 }); log(jsonString == JSON.stringify(new List<Person>() { p1, p2 })); //true log(jsonString); // 反序列化,泛型集合 JSON.parse<List<Person>>(jsonString); // 数组转换 JSON.parse<Person[]>(jsonString);

输出:

[{"Name":"lj","Age":12,"Alive":true,"FavoriteFilms":["Up","Avatar"],"Child":null },{"Name":"cy","Age":28,"Alive":false,"FavoriteFilms":null,"Child":{"Name":"lj", "Age":12,"Alive":true,"FavoriteFilms":["Up","Avatar"],"Child":null}}] 使用JavaScriptSerializer // using System.Web.Script.Serialization; var jser = new JavaScriptSerializer(); var json = jser.Serialize(new List<Person>() { p1, p2 }); var persons = jser.Deserialize<List<Person>>(json); 使用Silverlight // using System.Json var css = "{ \"#header\" : {background:\"red\"}, layout : [5,4,1],color:\"cyan\" }"; var style = JsonObject.Parse(css) as JsonObject; ( from s in style where s.Key == "color" select (string)s.Value ).First().ToString(); // "cyan" // 更多操作 style["layout"][0] = 22; var hd = style["#header"]; style["body>div+p"] = hd; style.Remove("#header"); var bd = new JsonObject(); bd["border"] = "1px solid cyan"; style["body>div+p"]["#meta"] = bd; style.ToString(); // {"layout":[22,4,1],"color":"cyan","body>div+p":{"background":"red","#meta":{"border":"1px solid cyan"}}} 使用JSON.NET // using Newtonsoft.Json; var json = JsonConvert.SerializeObject(new[] { p1, p2 }); var persons = JsonConvert.DeserializeObject<List<Person>>(json); var ja = JArray.Parse(jsonString); log(ja); //注意,格式化过的输出

输出:

[ { "Name": "lj", "Age": 12, "Alive": true, "FavoriteFilms": [ "Up", "Avatar" ], "Child": null }, { "Name": "cy", "Age": 28, "Alive": false, "FavoriteFilms": null, "Child": { "Name": "lj", "Age": 12, "Alive": true, "FavoriteFilms": [ "Up", "Avatar" ], "Child": null } } ]

标签:

原文地址:https://www.cnblogs.com/chxl800/p/10387220.html

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/47804.html

Jm-杰米博客Jamie
草根站长的技术交流乐园!IT不会不要紧快来好好学习吧!
  • 20786文章总数
  • 7494607访问次数
  • 建站天数
  • 友情链接