上一节我们讨论了如何手动方式来处理JSON对象数据,可能你也发现了,是有些痛苦,那么,用什么方法来读写JSON数据才算好玩?有的,如果你耍过WCF,或许已经想到了——JSON序列化和反序列化。
DataContractJsonSerializer类位于System.Runtime.Serialization.Json命名空间,我们只需要简单的调用两个方法就可以完成序列化和反序列化。
WriteObject:序列化,把对象写入JSON数据;
ReadObject:反序列化,从JSON数据中读入对象数据。
要完成今天的实例,我们先要定义一个类作为测试,这里我就举一个简单的,员工类,它有三个属性:姓名,联系电话,简介。定义如下。
- public class Employee
- {
- /// <summary>
- /// 员工姓名
- /// </summary>
- public string Name { get; set; }
- /// <summary>
- /// 联系手机
- /// </summary>
- public string Phone { get; set; }
- /// <summary>
- /// 简介
- /// </summary>
- public string Description { get; set; }
- }
对于UI,可以参考下面的XAML,我就不详细说,你会看得懂的。
- <Page
- x:Class="App1.MainPage"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="using:App1"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d">
- <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
- <Grid.ColumnDefinitions>
- <ColumnDefinition/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <StackPanel Orientation="Vertical" Grid.Column="0" Margin="17">
- <TextBlock Text="员工姓名:"/>
- <TextBox x:Name="txtName" Margin="0,2,0,14"/>
- <TextBlock Text="联系电话:"/>
- <TextBox x:Name="txtPhone" Margin="0,2,0,15"/>
- <TextBlock Text="员工简介:"/>
- <TextBox x:Name="txtDesc" Margin="0,2,0,26"/>
- <Button Content="保存数据" Click="onSave"/>
- </StackPanel>
- <StackPanel Orientation="Vertical" Grid.Column="1" Margin="15">
- <Button Content="加载数据" Click="onLoadData"/>
- <TextBlock x:Name="tbInfo" TextWrapping="Wrap" Margin="0,15,0,0"/>
- </StackPanel>
- </Grid>
- </Page>
切换到代码视图,参考下面代码:
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using Windows.Foundation;
- using Windows.Foundation.Collections;
- using Windows.UI.Xaml;
- using Windows.UI.Xaml.Controls;
- using Windows.UI.Xaml.Controls.Primitives;
- using Windows.UI.Xaml.Data;
- using Windows.UI.Xaml.Input;
- using Windows.UI.Xaml.Media;
- using Windows.UI.Xaml.Navigation;
- // 引入以下命名空间
- using System.Runtime.Serialization.Json;
- using Windows.Storage;
- using Windows.Storage.Pickers;
- using Windows.Storage.Streams;
- using Windows.UI.Popups;
- namespace App1
- {