JSON

使用JSON.NET动态解析JSON(2)

字号+ 作者:H5之家 来源:H5之家 2016-07-04 18:00 我要评论( )

下面的的示例接收动态JSON输入,然后创建一个新的动态JSON对象,并返回第一个对象: [ HttpPost ] public JObject PostAlbumJObject( JObject jAlbum){ // dynamic input from inbound JSON dynamic album = jAlbum

下面的的示例接收动态JSON输入,然后创建一个新的动态JSON对象,并返回第一个对象:

[HttpPost] public JObject PostAlbumJObject(JObject jAlbum) { // dynamic input from inbound JSON dynamic album = jAlbum; // create a new JSON object to write out dynamic newAlbum = new JObject(); // Create properties on the new instance // with values from the first newAlbum.AlbumName = album.AlbumName + " New"; newAlbum.NewProperty = "something new"; newAlbum.Songs = new JArray(); foreach (dynamic song in album.Songs) { song.SongName = song.SongName + " New"; newAlbum.Songs.Add(song); } return newAlbum; } //向服务器发送请求的原始格式 { AlbumName: "Dirty Deeds", Songs: [ { SongName: "Problem Child" }, { SongName: "Squealer" }] } //服务器返回的数据格式如下: { "AlbumName": "Dirty Deeds New", "NewProperty": "something new", "Songs": [ { "SongName": "Problem Child New" }, { "SongName": "Squealer New" }] }

当你在WEB API方法中接收或返回JObject、JValue、JToken或JArray实例,MVC API提供的格式化媒体自动进行转换,让代码看起来更优雅。

动态的强类型映射

此外我们还可以将JObject和JArray实例映射到一个强类型的对象,所以你可以在同一段代码中混合书写动态和静态类型,让你乐在其中。

[TestMethod] public void JsonParseToStrongTypeTest(string jsonString) { JArray albums = JArray.Parse(jsonString) as JArray; // pick out one album JObject jalbum = albums[0] as JObject; // Copy to a static Album instance Album album = jalbum.ToObject<Album>(); Assert.IsNotNull(album); Assert.AreEqual(album.AlbumName, jalbum.Value<string>("AlbumName")); Assert.IsTrue(album.Songs.Count > 0); }

上面的代码将一段JSON数组格式的字符串转换为JArray对象,同时取出数组的第一个元素,将第一个元素转换为静态的强类型对象。

强类型JSON解析

上面介绍了JSON.NET对动态语言的支持,但也别忘了它对静态类型的强大支持,关于如何序列化和反序列化强类型对象,下面提供一个简单的示例:

[TestMethod] public void StronglyTypedSerializationTest() { // Demonstrate deserialization from a raw string var album = new Album() { AlbumName = "Dirty Deeds Done Dirt Cheap", Artist = "AC/DC", Entered = DateTime.Now, YearReleased = 1976, Songs = new List<Song>() { new Song() { SongName = "Dirty Deeds Done Dirt Cheap", SongLength = "4:11" }, new Song() { SongName = "Love at First Feel", SongLength = "3:10" } } }; // serialize to string string json2 = JsonConvert.SerializeObject(album, Formatting.Indented); Console.WriteLine(json2); // make sure we can serialize back var album2 = JsonConvert.DeserializeObject<Album>(json2); Assert.IsNotNull(album2); Assert.IsTrue(album2.AlbumName == "Dirty Deeds Done Dirt Cheap"); Assert.IsTrue(album2.Songs.Count == 2); }

JsonConvert是一个高级别的静态类,包装更低级别的功能,但你也可以使用JsonSerializer类,该类可以序列化和反序列化各种流,它是支持更多一点的工作,为您提供更多的控制。

最后的总结

JSON.NET是一个相当齐全的JSON处理组件,为我们提供了更多的选择,对静态语言和动态语言的支持,复杂的JSON可通过LINQ查询出来,灵活的扩展性,优秀的开源库,值得我们每一个.NET开发人员深入学习。

继续浏览有关 JSON 的文章

上一篇 Paste from Visual Studio 代码高亮测试 零度格式化工具预览版 下一篇

与本文相关的文章

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • js遍历json数组

    js遍历json数组

    2016-07-05 10:00

  • JSON必知必会

    JSON必知必会

    2016-07-04 17:08

  • Java的JSON转换类库GSON的基础使用教程

    Java的JSON转换类库GSON的基础使用教程

    2016-06-28 14:00

  • GSON实现Java对象的JSON序列化与反序列化的实例教程

    GSON实现Java对象的JSON序列化与反序列化的实例教程

    2016-06-28 13:00

网友点评